SQLiteDiskIOException: ошибка ввода-вывода диска происходит на Cursor.moveToNext () - PullRequest
0 голосов
/ 08 января 2011

Программа получает курсор и проходит по нему с 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(), происходит сбой с тем же исключением.

Проблема касалась только одной таблицы в базе данных. Я снял файл базы данных с телефона и открыл его на своем компьютере, и он выглядел нормально. Мне удалось выполнить тот же запрос, который вызывал проблему, и он работал просто отлично.

Затем я полностью удалил приложение из телефона и заново установил его, и проблема, похоже, ушла. Так что с одной стороны это выглядело как испорченный стол, а с другой - нет ...

Обновление

Эта ошибка повторяется в той же таблице. После переустановки приложения на устройстве проблема ушла на некоторое время. Я посмотрю, смогу ли я отследить, когда это начнется.

Ответы [ 3 ]

2 голосов
/ 17 января 2011

Я обнаружил, что это происходит, когда таблицы, участвующие в запросе, должны быть определенного размера. Это было довольно дорогое JOIN, и казалось, что это было слишком интенсивно.

0 голосов
/ 23 мая 2013

Я получаю эту ошибку с запросом объединения двух таблиц.Поскольку невозможно напрямую применить ограничение на объединение с sqlite, было решено использовать подзапросы, как описано здесь

0 голосов
/ 12 апреля 2012

Я видел такое же исключение в моем Android-эмуляторе:

Действительно, я выполнил SQL-запрос с парой объединений, который дал хорошие результаты.Когда я выполнил этот же запрос с другим тестовым пользователем, с меньшим количеством данных, я не увидел исключения.

Однако, когда я тестировал эту же ситуацию в моем Samsung Galaxy Tab, к счастью, он работал нормально: P.

Полагаю, это пределы памяти ЭМУЛЯТОРА?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...