Активность неправильно управляет курсором. - PullRequest
0 голосов
/ 28 июля 2011

У меня есть действие, которое заполняет список и выполняет другие действия из курсора. Я получаю курсор от метода, который возвращает его на основе стандартного запроса SQLite для Android в мою базу данных. Метод определен в моем классе SQLHelper. Метод открывает базу данных, запрашивает, закрывает базу данных и возвращает курсор. После того, как курсор был собран в упражнении, я звоню startManagingCursor(cursor);

Все это прекрасно работает.

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

07-28 18:11:04.674: ERROR/AndroidRuntime(224): java.lang.RuntimeException: Unable to resume activity {blabla}: java.lang.IllegalStateException: mQuery SELECT * FROM vehicles WHERE _id=? 1 
...
07-28 18:11:04.674: ERROR/AndroidRuntime(224): Caused by: java.lang.IllegalStateException: mQuery SELECT * FROM vehicles WHERE _id=? 1 
07-28 18:11:04.674: ERROR/AndroidRuntime(224):     at android.database.sqlite.SQLiteQuery.requery(SQLiteQuery.java:162)
07-28 18:11:04.674: ERROR/AndroidRuntime(224):     at android.database.sqlite.SQLiteCursor.requery(SQLiteCursor.java:536)

...
07-28 18:11:04.674: ERROR/AndroidRuntime(224): Caused by: android.database.sqlite.SQLiteMisuseException: library routine called out of sequence: handle 0x0
07-28 18:11:04.674: ERROR/AndroidRuntime(224):     at android.database.sqlite.SQLiteProgram.native_bind_string(Native Method)
07-28 18:11:04.674: ERROR/AndroidRuntime(224):     at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:178)
07-28 18:11:04.674: ERROR/AndroidRuntime(224):     at android.database.sqlite.SQLiteQuery.requery(SQLiteQuery.java:153)

Проблема, очевидно, в том, что он пытается повторно запросить курсор. Если я закрываю курсор вручную перед тем, как запустить намерение, то он работает нормально. Но тогда мне нужно повторно запросить его вручную, и не в этом ли смысл startManagingCursor()? У меня есть два курсора в действии, которые созданы одинаково, и я вызываю указатель начала управления на обоих, оба вызывают сбой при возобновлении.

Есть ли что-то еще, что мне нужно сделать, чтобы моя активность правильно управляла курсорами? Спасибо.

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

Попробуйте закрыть курсор в onPause() (cursor.close()). Если вы используете SimpleCursorAdapter, вы также должны отсоединить курсор от адаптера.

Вы можете запросить курсор в методе onResume(), если хотите.

2 голосов
/ 01 августа 2011

Что ж, получается, что Cursor.requery () устарел, и я получал одну и ту же ошибку каждый раз, когда пытался ее вызвать.startManagingCursor () вызывал запрос, как я полагаю, должен, и это, в свою очередь, вызывало там мои проблемы ... Я не уверен, почему запрос вызывает ошибку в этом случае, я успешно использовал его раньше.

В итоге я переставил некоторый код и поместил свой курсор курсора = SQLHelper.getwhwhatcursor () в onResume () вместо onCreate, так как onResume вызывается сразу после onCreate в любом случае.В соответствии с рекомендацией Николы я также закрываю курсоры в onPause ().

Кажется, это работает сейчас ...

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