Android: excepción no captada lanzada por el finalizador

Tengo este pedazo de código que toma la respuesta del servidor y lo escribe en un archivo.

El archivo contiene datos json. Escribo la respuesta en el archivo con el fin de escanear json secuencialmente y para evitar cargar grandes datos json en una lista!

Creo que la excepción se lanza en este método, pero no estoy seguro!

public File getData(final String url) throws URISyntaxException, AuthenticationException, IOException, ClientProtocolException, HttpResponseException { final HttpGet getRequest = new HttpGet(new URI(url)); final UsernamePasswordCredentials creds = new UsernamePasswordCredentials(username, password); getRequest.addHeader(new BasicScheme().authenticate(creds, getRequest)); getRequest.setHeader("Content-Type", "application/json"); final ResponseHandler<byte[]> responseHandler = new ByteArrayResponseHandler(); final byte[] responseBody = mClient.execute(getRequest, responseHandler); final File output = new File(FileConfig.TEMP_PATH + System.currentTimeMillis()+".json"); final FileOutputStream fos = new FileOutputStream(output.getPath()); fos.write(responseBody); fos.close(); return output; } 

Pero he notado que recientemente (no sé por qué) me sale esta excepción:

 01-22 07:45:51.809: E/System(9055): Uncaught exception thrown by finalizer 01-22 07:45:51.833: E/System(9055): java.io.IOException: close failed: EIO (I/O error) 01-22 07:45:51.833: E/System(9055): at libcore.io.IoUtils.close(IoUtils.java:41) 01-22 07:45:51.833: E/System(9055): at java.io.FileInputStream.close(FileInputStream.java:121) 01-22 07:45:51.833: E/System(9055): at java.io.FileInputStream.finalize(FileInputStream.java:142) 01-22 07:45:51.833: E/System(9055): at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:185) 01-22 07:45:51.833: E/System(9055): at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:168) 01-22 07:45:51.833: E/System(9055): at java.lang.Thread.run(Thread.java:856) 01-22 07:45:51.833: E/System(9055): Caused by: libcore.io.ErrnoException: close failed: EIO (I/O error) 01-22 07:45:51.833: E/System(9055): at libcore.io.Posix.close(Native Method) 01-22 07:45:51.833: E/System(9055): at libcore.io.BlockGuardOs.close(BlockGuardOs.java:75) 01-22 07:45:51.833: E/System(9055): at libcore.io.IoUtils.close(IoUtils.java:38) 01-22 07:45:51.833: E/System(9055): ... 5 more 01-22 07:45:51.833: E/System(9055): Uncaught exception thrown by finalizer 01-22 07:45:51.841: E/System(9055): java.io.IOException: close failed: EIO (I/O error) 01-22 07:45:51.841: E/System(9055): at libcore.io.IoUtils.close(IoUtils.java:41) 01-22 07:45:51.841: E/System(9055): at java.io.FileInputStream.close(FileInputStream.java:121) 01-22 07:45:51.841: E/System(9055): at java.io.FileInputStream.finalize(FileInputStream.java:142) 01-22 07:45:51.841: E/System(9055): at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:185) 01-22 07:45:51.841: E/System(9055): at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:168) 01-22 07:45:51.841: E/System(9055): at java.lang.Thread.run(Thread.java:856) 01-22 07:45:51.841: E/System(9055): Caused by: libcore.io.ErrnoException: close failed: EIO (I/O error) 01-22 07:45:51.841: E/System(9055): at libcore.io.Posix.close(Native Method) 01-22 07:45:51.841: E/System(9055): at libcore.io.BlockGuardOs.close(BlockGuardOs.java:75) 01-22 07:45:51.841: E/System(9055): at libcore.io.IoUtils.close(IoUtils.java:38) 01-22 07:45:51.841: E/System(9055): ... 5 more 

Todo parece funcionar, pero estoy perplejo acerca de esta excepción.

El targetSdk ok mi aplicación es 13.

Gracias por cualquier comentario / respuesta!

Actualizar su código algo como esto.

  public File getData(final String url) throws URISyntaxException, AuthenticationException, IOException, ClientProtocolException, HttpResponseException { FileOutputStream fos = null; File output = null; final HttpGet getRequest = new HttpGet(new URI(url)); final UsernamePasswordCredentials creds = new UsernamePasswordCredentials( username, password); getRequest.addHeader(new BasicScheme().authenticate(creds, getRequest)); getRequest.setHeader("Content-Type", "application/json"); final ResponseHandler<byte[]> responseHandler = new ByteArrayResponseHandler(); final byte[] responseBody = mClient .execute(getRequest, responseHandler); try { output = new File(FileConfig.TEMP_PATH + System.currentTimeMillis() + ".json"); fos = new FileOutputStream(output.getPath()); fos.write(responseBody); fos.flush(); fos.close(); } catch (FileNotFoundException e) { } catch (IOException e) { } catch (Exception e) { } finally { if (fos != null) { fos = null; } } return output; } 

Porque cuando estás tratando de fos.wrire () o fos.close () puede a través de IOException y cuando su llamada nueva FileOutputStream (output.getPath ()); Puede hacerlo a través de FileNotFoundException.

  • ¿Cómo juega Android InputStream en MediaPlayer?
  • Android: descarga de la imagen desde la Web, guardando en la memoria interna en una ubicación privada a la aplicación, mostrando para el elemento de lista
  • Leer un archivo binario en android
  • Android: ¿Cómo almacenar datos en la memoria interna?
  • Archivo de guardar archivos de Android FileOutputStream
  • OutputStreamWriter no agrega
  • FileOutputStream falló con FileNotFoundException aunque el archivo aparentemente, existe, es escribible y tiene permisos
  • Volley - descarga directamente al archivo (no en la matriz de memoria byte)
  • Android: Escribir texto en txt
  • ¿Cómo puedo permitir que los usuarios accedan al directorio de almacenamiento interno de mi aplicación?
  • BitmapFactory.decodeFile devuelve una imagen nula incluso existe
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.