SQLiteDiskIOException с кодом ошибки 10: ошибка ввода-вывода диска

Я переместил базу данных SQLite на SD-карту, но иногда она выдает следующее исключение:

android.database.sqlite.SQLiteDiskIOException: error code 10: disk I/O error

Любые предложения о том, как я могу предотвратить это?

1 ответ

Поскольку вы используете внешнее хранилище, ваше приложение должно знать о состоянии внешнего хранилища, которое вы можете получить через Environment.getExternalStorageState(),

Вы должны получить доступ к внешнему хранилищу только тогда, когда состояние MOUNTED,

Если вы пытаетесь открыть файл (или базу данных SQLite; это просто файл!) Во время запуска устройства, у вас наверняка будут проблемы, поскольку внешнее хранилище не монтируется до запуска устройства (после отображения главного экрана).

Выходом из этого является регистрация IntentFilter получать уведомления обо всех изменениях в состоянии внешнего хранилища и вести себя соответственно.

Всегда хорошая идея прочитать документацию! Подробности смотрите в документации Android: http://developer.android.com/reference/android/os/Environment.html

Использование внешнего хранилища для этой цели сомнительно, потому что вы не можете контролировать, когда оно становится недоступным! Например, пользователь подключает свое устройство к USB на своем компьютере и выбирает опцию "Включить USB Mass Storage", чтобы они могли получить доступ к внешнему хранилищу своего устройства со своего компьютера. Плохие новости! Ваше приложение будет отключено от внешнего хранилища и, скорее всего, не сможет выполнить очистку ввода-вывода!

С таким положением вещей у вас теперь есть Что делать со всеми данными, которые вы бы помещали в свою базу данных, если бы только они были доступны.

Другие вопросы по тегам