HTTP请求导致java.io.FileNotFoundException

时间:2016-12-28 05:30:41

标签: java android

以下是从doInBackground()方法发出http请求的代码,由于某种原因,它会抛出FileNotFoundException

Bitmap icon = null;
String url = "http://abc.xyz.net/com.tatvic.oatest.gif?uv=2.0&ds=Yes&bt=100.0&tis=11.808&ais=5.478&tes=NA&aes=NA&cs=still";

try {
    InputStream in = new java.net.URL(url).openStream();
    icon = BitmapFactory.decodeStream(in);

} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

我遵循的另一种方法是使用HttpURLConnection,如下所示,但仍然会发生相同的异常。

HttpURLConnection urlConnection = (HttpURLConnection) new URL(url).openConnection();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
icon = BitmapFactory.decodeStream(in);

堆栈跟踪:

12-27 15:19:54.726 31141-31188/com.tatvic.oatest W/System.err: java.io.FileNotFoundException: http://abc.xyz.net/com.tatvic.oatest.gif?uv=2.0&ds=Yes&bt=100.0&tis=11.808&ais=5.478&tes=NA&aes=NA&cs=still
12-27 15:19:54.729 31141-31188/com.tatvic.oatest W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238)
12-27 15:19:54.729 31141-31188/com.tatvic.oatest W/System.err:     at java.net.URL.openStream(URL.java:470)
12-27 15:19:54.729 31141-31188/com.tatvic.oatest W/System.err:     at com.tatvic.lib.uit.e.a(Unknown Source)
12-27 15:19:54.729 31141-31188/com.tatvic.oatest W/System.err:     at com.tatvic.lib.uit.e.doInBackground(Unknown Source)
12-27 15:19:54.729 31141-31188/com.tatvic.oatest W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:295)
12-27 15:19:54.730 31141-31188/com.tatvic.oatest W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-27 15:19:54.730 31141-31188/com.tatvic.oatest W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
12-27 15:19:54.730 31141-31188/com.tatvic.oatest W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
12-27 15:19:54.730 31141-31188/com.tatvic.oatest W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
12-27 15:19:54.730 31141-31188/com.tatvic.oatest W/System.err:     at java.lang.Thread.run(Thread.java:818)

即使出现FileNotFoundException,我也无法从任何文件路径访问任何内容。我正在捕捉异常,但我还是要打电话给那个网址。

原因是什么?我怎样才能解决呢?

1 个答案:

答案 0 :(得分:6)

  

例外的原因是什么?

如果服务器抛出 404 ,则仅在进行网络呼叫时抛出

FileNotFoundException。即使您使用不允许的方法,即使用GET而不是POST,一些错误的服务器实现也会抛出 404

  

我该如何解决?

您可以通过点击浏览器中的URL并确保其实际存在来解决此问题。如果它存在,你不应该得到这个例外。