【问题标题】:Getting FileNotFoundException even though file is there in android即使文件在android中也得到FileNotFoundException
【发布时间】:2014-02-12 01:08:17
【问题描述】:

我正在尝试从链接中获取图像,这就是我所做的:

public class FetchImage extends AsyncTask<String, Void, Drawable> {

public static Drawable LoadImageFromWeb(String url) {
    try {
        InputStream is = (InputStream) new URL(url).getContent();
        Drawable d = Drawable.createFromStream(is, "src name");
        return d;
    } catch (IOException e) {
        Log.e("HATA", "THERE is an error", e);
        return null;
    }
}

@Override
protected Drawable doInBackground(String... params) {
    String url = params[0];
    return LoadImageFromWeb(url);
}

@Override
protected void onPostExecute(Drawable drawable) {

}

}

对于网址http://www.marketimyilmazlar.com/image/cache/data/INDIRIM/ao/Pril_TR_MAX_750ml_Lemon_189227_print_1772H_1772W-500x500.png,我成功获取了图片。但是,当我尝试使用 url http://www.marketimyilmazlar.com/image/cache/data/cay/Ncapkırmızı-500x500.jpg 时,它给了我一个 filenotfoundexception。这是 stacttrace:

02-11 18:22:15.475: E/HATA(16015): THERE is an error
02-11 18:22:15.475: E/HATA(16015): java.io.FileNotFoundException:     http://www.marketimyilmazlar.com/image/cache/data/cay/Ncapkırmızı-500x500.jpg
02-11 18:22:15.475: E/HATA(16015):  at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:186)
02-11 18:22:15.475: E/HATA(16015):  at java.net.URLConnection$DefaultContentHandler.getContent(URLConnection.java:1018)
02-11 18:22:15.475: E/HATA(16015):  at java.net.URLConnection.getContent(URLConnection.java:199)
02-11 18:22:15.475: E/HATA(16015):  at java.net.URL.getContent(URL.java:447)
02-11 18:22:15.475: E/HATA(16015):  at com.example.barcodescanner.FetchImage.LoadImageFromWeb(FetchImage.java:18)
02-11 18:22:15.475: E/HATA(16015):  at com.example.barcodescanner.FetchImage.doInBackground(FetchImage.java:30)
02-11 18:22:15.475: E/HATA(16015):  at com.example.barcodescanner.FetchImage.doInBackground(FetchImage.java:1)
02-11 18:22:15.475: E/HATA(16015):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
02-11 18:22:15.475: E/HATA(16015):  at java.util.concurrent.FutureTask.run(FutureTask.java:234)
02-11 18:22:15.475: E/HATA(16015):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
02-11 18:22:15.475: E/HATA(16015):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
02-11 18:22:15.475: E/HATA(16015):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
02-11 18:22:15.475: E/HATA(16015):  at java.lang.Thread.run(Thread.java:841)

真的很奇怪。可能是因为链接中的一些土耳其字符,例如“ı”,而不是“i”?如果是这样,我该如何解决?

谢谢

编辑:我刚刚意识到另一件事,当我在浏览器中打开以下链接时,

http://www.marketimyilmazlar.com/image/cache/data/DUZELTME/dvm/screenshot7-500x500.jpg

我看到链接变了,变成了:

http://www.marketimyilmazlar.com/image/cache/data/DUZELTME/dvm/screenshot%207-500x500.jpg

那么,为什么会发生这种情况?为什么我在尝试获取图像时不能使用第一个链接?

【问题讨论】:

  • 清单中的互联网权限?
  • @Selvin 是的,我实际上也可以从其他链接获取一些图像,但是有些链接不起作用,很奇怪
  • 您应该使用 url 编码对您的链接进行编码,不确定它是如何为 android 完成的。您的 nescafe 链接应该是 marketimyilmazlar.com/image/cache/data/cay/… 例如编辑:最后一部分是“Ncapk%C4%B1rm%C4%B1z%C4%B1-500x500.jpg”,stackoverflow 裁剪长链接

标签: android android-asynctask


【解决方案1】:

您对“ı”土耳其语字符的看法是正确的:如果您查看答案,您会发现 Stackoverflow 无法自动识别给您带来问题的 url。

使用 Firefox 我可以访问您的网址,但是当我使用开发人员工具检查网址时,网址是 http://www.marketimyilmazlar.com/image/cache/data/cay/Ncapk%C4%B1rm%C4%B1z%C4%B1-500x500.jpg 注意非 ASCII 字符被转义了。

编辑 1:

要访问非 ascii 字符的 url,您需要在发出请求之前使用特殊字符对 url 的部分进行编码:URL encoding in Android

【讨论】:

  • 谢谢,没有办法从那个网址获取图片吗?
  • android中有套路可以转换你的url。请参阅下面我的答案中的链接。
【解决方案2】:

我想你可以在这里找到答案:

Invalid URI with Chinese characters (Java)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2013-02-10
    • 2011-07-21
    • 1970-01-01
    相关资源
    最近更新 更多