Android SQLite SQLiteOpenHelper IllegalStateException - DB Already Closed Error

Это сводит меня с ума уже несколько дней. У меня довольно сложное приложение для Android. Он использует несколько потоков для извлечения данных с сервера и заполнения базы данных SQLite. Я использую синглтон для ссылки на свое расширение SQLiteOpenHelper. Я открываю и закрываю базу данных в каждом из своих действий.

Ошибка возникает ТОЛЬКО в ситуации, когда я выполняю 4 действия и затем пытаюсь отступить. Я пробовал различные способы открытия и закрытия базы данных, в том числе перемещение закрытия из onDestroy () в методы onPause (), а также добавление еще одного open в onResume ().

Также следует отметить, что мои действия усложняют использование ListViews и ExpandableListViews, которые, как я понимаю, могут привести к закрытию базы данных на основании этой статьи: http: // darutk-oboegaki.blogspot.com/2011/03/sqlitedatabase-is-closed-automatically.html

Я просмотрел код и убедился, что либо закрываю все свои курсоры, либо, если они назначаются адаптер, вызывающий startManagingCursor ().

Кто-нибудь знает, что происходит?

java.lang.RuntimeException: Unable to resume activity {com.fieldone/com.fieldone.DispatchActivity}: java.lang.IllegalStateException: database /data/data/com.fieldone/databases/InterstateAirConditioning-1602814322.db already closed
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3347)
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3362)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2162)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:144)
    at android.app.ActivityThread.main(ActivityThread.java:4937)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: database /data/data/com.fieldone/databases/InterstateAirConditioning-1602814322.db already closed
    at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:237)
    at android.database.sqlite.SQLiteQuery.requery(SQLiteQuery.java:145)
    at android.database.sqlite.SQLiteCursor.requery(SQLiteCursor.java:567)
    at android.app.Activity.performRestart(Activity.java:3836)
    at android.app.Activity.performResume(Activity.java:3857)
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3337)
    ... 10 more

ОБНОВЛЕНИЕ: Я исправил проблему, но не уверен, ПОЧЕМУ это решило. Так что, может быть, кто-то знает или может объяснить.

Когда я нахожусь на 4-м действии стека действий, я пытался закрыть базу данных с помощью db.close (). Независимо от того, ГДЕ я поместил это, в onCreate после того, как я получу нужные мне данные, или в onStop или onDestroy, это вызовет эту ошибку. Если я НЕ закрываю базу данных, у меня нет проблемы. Итак, что-то вызывает автоматическое закрытие базы данных. Странно то, что хотя в этом последнем упражнении я использую expandableListView, я НЕ использую cursorAdapter. У кого-нибудь есть мысли? Хотел бы это понять.

11
задан SBerg413 17 December 2014 в 21:22
поделиться