Android SQLite SQLiteOpenHelper IllegalStateException - DB Déjà Fermé d'Erreur

Cela a été me rend fou depuis quelques jours maintenant. J'ai une application android qui est assez complexe. Il utilise plusieurs threads pour extraire des données à partir d'un serveur et de remplir la base de données SQLite. Je suis à l'aide d'un singleton pour référencer mon extension de SQLiteOpenHelper. Je suis de l'ouverture et de la fermeture de la base de données dans chacune de mes activités.

L'erreur ne se produit que dans une situation où je suis en 4 activités profonde et ensuite tenter de faire marche arrière. J'ai essayé différentes manières de l'ouverture et de la fermeture de la base de données, y compris le déplacement de la clôture de la onDestroy() à la onPause() les méthodes et l'ajout d'un autre ouvert à la onResume().

Également de noter mes activités en faire un usage intensif de ListViews et ExpandableListViews, que je comprends, cela pourrait entraîner la base de données à proximité basé sur cet article: http://darutk-oboegaki.blogspot.com/2011/03/sqlitedatabase-is-closed-automatically.html

Je suis passé par le code et fait en sorte que je suis en train de fermer tous mes curseurs, ou, s'ils sont affectés à un adaptateur, appelant startManagingCursor().

Quelqu'un indice quant à ce qu'il se passe?

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

Mise à JOUR: j'ai résolu le problème, mais vous ne savez pas POURQUOI ce fixe. Alors, peut-être quelqu'un là-bas sait ou pourrait l'expliquer.

Quand je suis dans la 4ème activité de la pile d'activités, j'ai été de tenter de fermer la db db.close(). Peu importe OÙ j'ai mis ce, dans le onCreate après je obtenir les données dont j'ai besoin, ou dans le onStop ou onDestroy, il va produire cette erreur. Si je NE ferme PAS la db, je ne suis pas avoir le problème. Alors, quelque chose est à l'origine de la db pour fermer automatiquement. La chose étrange est que, même si je suis à l'aide d'un expandableListView dans cette dernière activité, je ne suis PAS à l'aide d'un cursorAdapter. Quelqu'un a des idées? Aimerait comprendre.

OriginalL'auteur SBerg413 | 2011-06-30