Предотвращение сбоя приложения из java .io.IOException: ошибка записи: ENOSP C (на устройстве не осталось места) - PullRequest
0 голосов
/ 12 марта 2020

При попытке записи на устройство, когда устройство заполнено, я получаю сообщение об ошибке: com.google.gson.JsonIOException: java.io.IOException: write failed: ENOSPC (No space left on device). У меня есть блок try-catch, чтобы перехватить IOException, и несколько строк, чтобы проверить размер списка и доступное пространство для хранения, чтобы определить, есть ли место для записи файла, но все же это привело к сбою приложения, и я получил упомянутое выше IOException. .

Вот код:

File file = new File(getExternalFilesDir(null), fileName+".txt");
int file_size = Integer.parseInt(String.valueOf(file.length()/1024));
long storage_size = (getAvailableInternalMemorySize()/1024);
long list_size = listToWrite.toString().getBytes().length/1024;
long total_size = file_size + list_size;
if(total_size < storage_size) {
    try (Writer writer = new FileWriter(file, false)) {
        Gson gson = new GsonBuilder().create();
        gson.toJson(listToWrite, writer);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Есть ли способ остановить сбой приложения и просто отобразить сообщение Toast для пользователя или выполнить какое-либо действие.

1 Ответ

0 голосов
/ 12 марта 2020

Добавьте этот атрибут в файл манифеста:

android:installLocation="preferExternal"
...