Программа получает курсор и проходит по нему с while(cursor.moveToNext())
в нескольких разных местах, но одно из них постоянно дает это исключение:
01-08 09:00:06.168: ERROR/AndroidRuntime(13434): Caused by: android.database.sqlite.SQLiteDiskIOException: disk I/O error
01-08 09:00:06.168: ERROR/AndroidRuntime(13434): at android.database.sqlite.SQLiteQuery.native_fill_window(Native Method)
01-08 09:00:06.168: ERROR/AndroidRuntime(13434): at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:75)
01-08 09:00:06.168: ERROR/AndroidRuntime(13434): at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:296)
01-08 09:00:06.168: ERROR/AndroidRuntime(13434): at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:269)
01-08 09:00:06.168: ERROR/AndroidRuntime(13434): at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:171)
01-08 09:00:06.168: ERROR/AndroidRuntime(13434): at android.database.AbstractCursor.moveToNext(AbstractCursor.java:256)
01-08 09:00:06.168: ERROR/AndroidRuntime(13434): at ... [my code]
Наблюдая за этим в отладке, он попадает в строку while(cursor.moveToNext())
, а затем останавливается на пару секунд перед выдачей этой ошибки.
Какие возможные проблемы могут вызвать эту ошибку?
Дополнительная информация
Если я пытаюсь позвонить cursor.getCount()
, происходит сбой с тем же исключением.
Проблема касалась только одной таблицы в базе данных. Я снял файл базы данных с телефона и открыл его на своем компьютере, и он выглядел нормально. Мне удалось выполнить тот же запрос, который вызывал проблему, и он работал просто отлично.
Затем я полностью удалил приложение из телефона и заново установил его, и проблема, похоже, ушла. Так что с одной стороны это выглядело как испорченный стол, а с другой - нет ...
Обновление
Эта ошибка повторяется в той же таблице. После переустановки приложения на устройстве проблема ушла на некоторое время. Я посмотрю, смогу ли я отследить, когда это начнется.