Android OkHttp InputStream java.IOException.closed

Utilizo un OkHttpClient para descargar una base de datos en el servidor y para copiarlo en mi aplicación de Android, la solicitud está bien y obtendré el buen contenido.

Sin embargo cuando intento escribir mi byteStream a mi archivo consigo un java.IOException.closed . ¿Sabes lo que estoy haciendo mal?

 Response httpResponse = webApiClient.execute( new WebApiRequest(WebApiMethod.DB_DOWNLOAD), context); if (httpResponse.code() == 200) { try { InputStream inputStream = httpResponse.body().byteStream(); File databasePath = context.getDatabasePath(Constant.DATABASE_NAME); FileOutputStream output = new FileOutputStream(databasePath); int bufferSize = 1024; byte[] buffer = new byte[bufferSize]; int len; while ((len = inputStream.read(buffer)) != -1) { output.write(buffer, 0, len); } success = true; } catch (Exception exc) { Utils.DisplayException(exc, context); } } 

También intenté leer mi ByteStream con un BufferedSink pero el resultado era el mismo

 BufferedSink sink = Okio.buffer(Okio.sink(databasePath)); sink.writeAll(httpResponse.body().source()); sink.close(); 

StackTrace:

 java.io.IOException: closed at okio.RealBufferedSource$1.read(RealBufferedSource.java:367) at java.io.InputStream.read(InputStream.java:162) at com.org.dbconn.LoginActivity$DbDownloadTask.doInBackground(LoginActivity.java:475) at com.org.dbconn.LoginActivity$DbDownloadTask.doInBackground(LoginActivity.java:436) at android.os.AsyncTask$2.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) 

Encuentro porqué la corriente fue cerrada, para una cierta prueba, yo estaba comprobando el contenido de mi secuencia de la salida con un System.out.println , pero cuando usted lee o imprime la salida él cierra automáticamente la corriente, esto es porqué consigo un error .

En conclusión, una cosa para recordar con el flujo: leer o imprimir el outputStream lo cerrará.

  • Com.android.volley.NoConnectionError después de detener la aplicación
  • Retrofit invoca el método failure () incluso cuando el código de estado de los encabezados es 200
  • Cómo manejar la paginación en retrofit
  • Retrofit2 (interceptor) + GoogleApiClient cómo actualizar token
  • OkHttp PublicKey pinning en Android
  • ¿Cómo alertar al usuario utilizando Toast que la solicitud OkHttp devolvió algo distinto de 200?
  • Petición POST de Retrofit con la autenticación HTTP básica: "No se puede reintentar el cuerpo HTTP transmitido"
  • Subir un archivo grande en varias partes usando OkHttp
  • ¿Creación de directorio para caché OkHttp en Android?
  • OkHttpClient cerrar la conexión
  • Detectar si la respuesta OkHttp proviene de caché (con Retrofit)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.