Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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