gpt4 book ai didi

java - Android 中格式错误的 URL 异常

转载 作者:行者123 更新时间:2023-12-02 00:59:44 26 4
gpt4 key购买 nike

传递以字符串形式存储在数组中的 URL 时遇到以下错误:java.net.MalformedURLException: no protocol: "http://cdn.posh24.se/images/:配置文件/022439100375d87ad153ed7038a3d2ba6"

我已将 url 保存在字符串数组 imageURLs[] 中,该数组将 URL 存储为字符串。当我直接粘贴链接时, downloadImage.execute("http://cdn.posh24.se/images/:profile/022439100375d87ad153ed7038a3d2ba6").get() 工作完美。但是,当我传入对 URL 的数组引用时,例如:execute(imageURLs[0]).get(),它会抛出上述错误。

从网上下载位图的代码:

public class DownloadCelebImage extends AsyncTask<String, Void, Bitmap> {
Bitmap resultImage;

@Override
protected Bitmap doInBackground(String... urls) {
try {
URL imageURL = new URL(urls[0]);
HttpURLConnection httpURLConnection = (HttpURLConnection) imageURL.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
resultImage = BitmapFactory.decodeStream(inputStream);
return resultImage;
} catch (Exception e) {
e.printStackTrace();
return resultImage;
}
}
}

方法调用:

DownloadCelebImage downloadImage = new DownloadCelebImage();
Bitmap fetchedCelebMugshot = null;
int randomCelebIndex = getRandomCelebrity();
try {
String url = profileArray[randomCelebIndex][0];
fetchedCelebMugshot = downloadImage.execute(url).get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}

请注意,profileArray[randomCelebIndex][0] 包含下载图像的链接(“http://cdn.posh24.se/images/:profile/022439100375d87ad153ed7038a3d2ba6 ”)。它引发了execute(url).get() 的异常。

编辑

在下面答案的评论中检查正确的解决方案。那边已经解释过了。

最佳答案

您正在使用的网址:

  http://cdn.posh24.se/images/:profile/022439100375d87ad153ed7038a3d2ba6

路径中包含:: 字符是保留字符,应使用 % 转义。 URL 的更正版本是

  http://cdn.posh24.se/images/%3Aprofile/022439100375d87ad153ed7038a3d2ba6

我不知道未转义的 : 是否会导致您遇到的问题。事实上,我无法用 Java(tm) 重现该异常。所以我怀疑这不是真正的问题。

<小时/>

你说:

When I pasted the link directly,

downloadImage.execute("http://cdn.posh24.se/images/:profile/022439100375d87ad153ed7038a3d2ba6").get()

it works flawlessly. But when I pass in the array reference to the URL, for example:

execute(imageURLs[0]).get(), 

it throws me the above mentioned error.

如果我们从表面上理解您所说的内容,那么只有一个逻辑解释:imageURLs[0] 在使用该字符串时不包含该字符串。

我知道你说过它可以......但它不能。

那么这里会发生什么呢?

  • 你可能只是误会了。 (它发生了)
  • 网址可能看起来相同,但实际上略有不同。 (阅读 homoglyphs 。)
  • 这可能是同步不充分导致的问题。我认为这是最有可能的解释。

如果一个线程正在填充 imageURLs 数组,而另一个线程正在读取,并且这两个线程未正确同步,则读取线程可能看不到正确的值。有以下几种情况:

  • 读取线程可能过早读取数组单元。
  • 写入线程(或另一个线程)可能会覆盖数组单元,而读取线程可能会选择错误的版本
  • 这可能是内存异常;例如由于对数组单元的写入未刷新到内存。 Java只会在同步点插入内存屏障(例如缓存刷新指令)。 (从技术上讲,当存在发生在关系之前......这也涵盖其他情况。)

请注意,使用调试器运行应用程序可能会更改程序的行为和/或在数组中显示与读取器线程所看到的不同的值。调试器提供的任何证据都应该受到怀疑。

<小时/>

我怀疑我们能查清真相的唯一方法就是你写一个完整的 minimal reproducible example其他人可以运行并观察您所看到的行为。

关于java - Android 中格式错误的 URL 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60819926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com