暂停应用程序后com.android.volley.NoConnectionError

我正在用Google Volley和Gson编写我的应用程序,使用OkHttp作为HTTP-Stack与REST服务进行通信。 这在大多数情况下效果不错,但当我暂停我的应用程序并返回到它时,HTTP请求不起作用这个例外:

09-08 19:29:19.611: E/ASDF(21827): com.android.volley.NoConnectionError: java.io.EOFException 09-08 19:29:19.611: E/ASDF(21827): at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:125) 09-08 19:29:19.611: E/ASDF(21827): at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:105) 09-08 19:29:19.611: E/ASDF(21827): Caused by: java.io.EOFException 09-08 19:29:19.611: E/ASDF(21827): at java.util.zip.GZIPInputStream.readFully(GZIPInputStream.java:206) 09-08 19:29:19.611: E/ASDF(21827): at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:98) 09-08 19:29:19.611: E/ASDF(21827): at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:81) 09-08 19:29:19.611: E/ASDF(21827): at com.squareup.okhttp.internal.http.HttpEngine.initContentStream(HttpEngine.java:461) 09-08 19:29:19.611: E/ASDF(21827): at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:659) 09-08 19:29:19.611: E/ASDF(21827): at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:346) 09-08 19:29:19.611: E/ASDF(21827): at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:295) 09-08 19:29:19.611: E/ASDF(21827): at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:489) 09-08 19:29:19.611: E/ASDF(21827): at com.squareup.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:136) 09-08 19:29:19.611: E/ASDF(21827): at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:109) 09-08 19:29:19.611: E/ASDF(21827): at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:93) 09-08 19:29:19.611: E/ASDF(21827): ... 1 more 

这是随机发生的。 不是每次我暂停我的应用程序。 我真的不知道从哪里开始。

Solutions Collecting From Web of "暂停应用程序后com.android.volley.NoConnectionError"

看来这个问题是由Android本身的错误引起的,应该修正! 这个问题及其解决方法在这里描述: Android问题24672

因此,将这段代码添加到我的OkHttp URLConnection工厂,立即解决了这个问题:

  @Override protected HttpURLConnection createConnection(URL url) throws IOException { HttpURLConnection connection = client.open(url); // Fix for bug in Android runtime(!!!): // https://code.google.com/p/android/issues/detail?id=24672 connection.setRequestProperty("Accept-Encoding", ""); return connection; } 

我有这个问题约一个小时。 如果您尝试连接到虚拟机rest服务,则需要更改android模拟器上的hosts文件。

我很困惑,因为我已经这么做了。 我不认为它保持模拟器重新启动之间的主机文件。 这是烦人的,但现在我(也许你)知道…