Intereting Posts
Eclipse вставляет arg0, arg1 и т. Д. Вместо правильных имен параметров при переопределении методов Android Android: есть ли идиома для итерации через SparseArray Сила Android TextView Android – как создать функцию многократного использования? Разработка HTML5 Android Значения Appcompat res-v21 temes_base на затмении не уходят Как программно получить высоту представления с кнопками на нем? Сохранение изображения из URL с помощью Picasso? Как повторить последнюю команду sql, выполненную в командной строке sqlite? Отключить подсветку Android GridView (отключить выбор) Android – сохранить объект в SharedPreferences и получить его в любом месте приложения Приложение загружает неправильные текстуры при открытии снова Не удалось указать целевые платформы. Проверьте правильность пути sdk android. Когда android срабатывает ACTION_BATTERY_LOW Android Eclipse Используйте внешние инструменты для запуска скрипта на коде

Android – Исключить исключение, созданное финализатором

У меня есть эта часть кода, которая берет ответ сервера и записывает его в файл.

Файл содержит данные json. Я пишу ответ в файл, чтобы последовательно сканировать json и избегать загрузки больших json-данных в List!

Я думаю, что в этом методе выбрано исключение, но я не уверен!

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

Но я заметил, что недавно (я не знаю, почему) я получаю это исключение:

 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 

Кажется, все работает, но я недоумеваю об этом исключении.

TargetSdk ok, мое приложение – 13.

Спасибо за любой комментарий / ответ!

Обновите свой код, что-то вроде этого.

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

Потому что, когда вы пытаетесь fos.wrire () или fos.close (), это может быть через IOException и когда вы вызываете новый FileOutputStream (output.getPath ()); Это может произойти через FileNotFoundException.