Запретить IllegalStateException в SQLiteCursor для Android - PullRequest
6 голосов
/ 05 февраля 2011

У меня есть ListActivity, который связан с курсором, когда элементы в ListView выбраны, EditItem запускается действие *1003*, это EditItem действие выполняет несколько запросов, каждый из которых помещается в их собственный отдельный курсор. Они используются для заполнения счетчиков, очень похоже на поле поиска в БД Access.

Моя проблема в том, что, как только пользователь покидает это действие EditItem, либо с помощью кнопки отправки, отмены или возврата, возвращается к действию ListView и выбирает другую запись в ListView (тот же элемент или другой элемент). ) Я получаю IllegalStateException ошибки в моем SQLiteCursor классе (Android, а не мой). Я закрываю свои курсоры в методе onDestroy обеих операций, так как иногда вызов результата все равно разрушает вызывающую деятельность.

Это не всегда происходит при втором выборе Предмета, иногда это происходит при третьем выборе. Я подумал, что, возможно, я просто двигался быстрее, чем ОС, поэтому я начал делать паузу, до 30 секунд, между своими действиями, ошибка выдается только после вызова операции для результата второй или третий раз. Никакое количество приостановок не исправляет это.

Редактировать: Ошибка в методе SQLiteCursor finalize при вызове super.finalize();

Редактировать # 2: Трассировка стека для потока:

Daemon System Thread [<5> HeapWorker] (Suspended (exception IllegalStateException)) 
SQLiteCursor.finalize() line: 603   
NativeStart.run() line: not available [native method]   

Редактировать # 3 Трассировка стека из LogCat (partlist - это имя таблицы):

INFO/dalvikvm(599): Ljava/lang/IllegalStateException;: Finalizing cursor android.database.sqlite.SQLiteCursor@437541a0 on partslist that has not been deactivated or closed
INFO/dalvikvm(599):     at android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:596)
INFO/dalvikvm(599):     at dalvik.system.NativeStart.run(Native Method)

Ответы [ 2 ]

16 голосов
/ 23 мая 2011

Убедитесь, что вы cursor.close(), когда закончите с ними.

1 голос
/ 19 апреля 2013

Добавление отсутствующего cursor.close() было решением проблемы.

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