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!
- Cómo descodificar la cadena base64 y convertirla en pdf / jpg y guardarla en almacenamiento
- Error de Android: abierto fallido ENOENT
- Android: abierto fallido: ENOENT (No hay tal archivo o directorio)
- Leer / escribir el archivo en el almacenamiento privado interno
- Ext4 / fsync situación poco clara en Android (Java)
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!
- Cómo escribir un InputStream potencialmente enorme para el archivo?
- Almacenamiento de la clave con KeyStore en Android
- Eliminación de archivos creados con FileOutputStream
- La grabación de vídeo con MediaRecorder y FileOutputStream produce un archivo de vídeo que no se puede reproducir
- ¿Cómo comprobar FileLock sin truncar el archivo?
- Escritura y lectura de cadenas a un almacenamiento interno en Android
- Android: ¿Una forma más rápida de leer / escribir un ZipInputStream?
- Android descargar problemas de archivo binario
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.
- Opción para ver el texto en diferentes idiomas en android?
- Cómo ajustar la altura de ListView cuando hay ExpandableListView incrustado en ListView