Com.android.volley.NoConnectionError después de detener la aplicación

Estoy escribiendo mi aplicación con Google Volley y Gson para hablar con un servicio REST con OkHttp como HTTP-Stack. Eso funciona bien la mayoría del tiempo pero cuando hago una pausa en mi aplicación y vuelvo a ella las peticiones HTTP no funcionan con esta Excepción:

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 

Eso sucede al azar. No cada vez que detengo mi solicitud. Realmente no tengo ni idea de por dónde empezar.

Parece que este problema es causado por un error en Android que debería arreglarse !? El problema y su corrección se describen aquí: Edición de Android 24672

Así que agregar este pedazo de código a mi fábrica de OkHttp URLConnection arregló el problema de inmediato:

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

Tuve este problema durante una hora. Si está intentando conectarse a un servicio de reposo de máquina virtual, debe cambiar el archivo de hosts en el emulador de Android.

Me quedé perplejo durante tanto tiempo porque ya había hecho esto. No creo que mantiene el archivo hosts entre reinicios del emulador. Que es molesto pero ahora yo (y tal vez usted) sabe …

  • InterruptedIOException al usar Retrofit2 con rx cuando retryOn
  • Ninguna excepción de clase encontrada com.squareup.okhttp.logging.HttpLoggingInterceptor
  • Retrofit Tiempo de respuesta más lento en los dispositivos Android reales en comparación con el emulador y la web
  • Cómo implementar la manipulación de cookies en Android usando OkHttp?
  • ¿Cómo usar Stetho con Volley?
  • Cómo agregar cabeceras a interceptor de solicitud OkHttp?
  • MultipartBuilder no se puede resolver en okhttp: 3.0.0-RC1
  • Picasso detectó un OkHttp no admitido en el classpath
  • RETROFIT & AUTH COOKIE
  • Cómo cambiar el cuerpo en OkHttp Response?
  • Cómo agregar parámetros a api (http post) usando la biblioteca okhttp en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.