これは私を数日間夢中にさせてきました。私はかなり複雑なAndroidアプリケーションを持っています。複数のスレッドを使用してサーバーからデータをプルし、SQLiteデータベースにデータを入力します。SQLiteOpenHelperの拡張機能を参照するためにシングルトンを使用しています。それぞれのアクティビティでデータベースを開いたり閉じたりしています。
このエラーは、私が4アクティビティの深さで、バックアウトしようとした場合にのみ発生します。データベースを開いたり閉じたりするさまざまな方法を試しました。たとえば、closeを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()を介してdbを閉じようとしていました。これをどこに置いても、必要なデータを取得した後のonCreate、またはonStopまたはonDestroyで、このエラーが発生します。データベースを閉じない場合、問題は発生していません。そのため、何かが原因でデータベースが自動的に閉じています。奇妙なことに、この最後のアクティビティではexpandableListViewを使用していますが、cursorAdapterは使用していません。誰か考えがありますか?これを理解したいと思います。