Com.android.volley.NoConnectionError после приостановки приложения

Я пишу свое приложение с Google Volley и Gson, чтобы поговорить с сервисом REST с OkHttp как HTTP-Stack. Это работает хорошо в большинстве случаев, но когда я приостанавливаю приложение и возвращаюсь к нему, 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

Это происходит случайным образом. Не каждый раз я приостанавливаю свое приложение. Я действительно не знаю, с чего начать.

Ответ 1

Кажется, что эта проблема вызвана ошибкой в ​​Android, которая должна быть исправлена ​​!? Проблема и ее исправление описаны здесь: Android-вопрос 24672

Итак, добавив этот фрагмент кода в мой URL-адрес OkHttp URLConnection factory, исправил проблему сразу:

  @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;
  }   

Ответ 2

У меня была эта проблема около часа. Если вы пытаетесь подключиться к службе останова виртуальной машины, вам нужно изменить файл hosts на эмуляторе Android.

Я был озадачен так долго, потому что я уже это сделал. Я не думаю, что он держит файл hosts между перезагрузками эмулятора. Что раздражает, но теперь я (и, может быть, вы) знаю...