我的Android應用程序中有一個用於我的Activities(WhereWolfActivity)的超類,它有一個靜態SQLiteDatabaseOpenHelper供所有子類使用。數據庫連接在onCreate中打開並在onDestroy中關閉(我跟蹤打開的子類活動的數量,以確保數據庫連接僅在應用程序中最後一個活動被銷燬時關閉)。當用戶註銷時,它們被帶到歡迎屏幕活動,該活動不具有WhereWolfActivity的子類,因此數據庫連接已關閉。但是,應用程序部隊當應用程序註銷關閉,我得到以下logcat的輸出:嘗試關閉SQLite數據庫時應用程序強制關閉
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): FATAL EXCEPTION: main
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): java.lang.RuntimeException: Unable to destroy activity {uk.ac.ic.doc.vmw10.wherewolf/uk.ac.ic.doc.vmw10.wherewolf.activities.Tabs}: java.lang.NullPointerException
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3655)
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3673)
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): at android.app.ActivityThread.access$2900(ActivityThread.java:125)
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): at android.os.Handler.dispatchMessage(Handler.java:99)
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): at android.os.Looper.loop(Looper.java:123)
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): at android.app.ActivityThread.main(ActivityThread.java:4627)
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): at java.lang.reflect.Method.invokeNative(Native Method)
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): at java.lang.reflect.Method.invoke(Method.java:521)
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): at dalvik.system.NativeStart.main(Native Method)
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): Caused by: java.lang.NullPointerException
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): at uk.ac.ic.doc.vmw10.wherewolf.activities.WhereWolfActivity.onDestroy(WhereWolfActivity.java:119)
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3642)
08-11 02:28:24.858: ERROR/AndroidRuntime(29022): ... 11 more
的NullPointerException異常上這行出現:dbHelper.close();
任何想法,爲什麼試圖關閉數據庫會給一個空指針異常?
dbHelper可能已經自動在活動推入後臺關閉。順便說一句,爲什麼不只是打開連接,當你需要他們? – 2011-08-11 02:49:11
我對於應用程序是否最好有1個dbHelper,或者隨時打開和關閉,我看到了不同的看法,所以現在是這樣,但我不知道哪種設計最好。 – Pikaling
此外,該應用程序的主要活動是一組使用遊標的選項卡,並且這些選項卡填充在異步任務中,所以我不想在運行時終止數據庫連接 – Pikaling