0
在我的主要活動(A)中,我打開調用特定類的數據庫(SQLite),並將「db-pointer」存儲到變量中。它的工作原理:我可以從/向數據庫加載/保存數據。當我按下微調按鈕時,數據庫引用變爲空
對於一些工作,我必須開始另一個活動(B)。這個打開數據庫對數據庫執行一些操作(特別是在其中創建一個新記錄)。
當我關閉(B),機器人重新啓動,並且重新開始的主要活動。我檢查「db-pointer」,它不是null。
在主活動有一個微調按鈕。如果我按下它並選擇一個不同的值,那麼「db-pointer」變爲null。 「onItemSelected()」必須調用數據庫來查找數據。 爲什麼「db-pointer」變爲空?
代碼來打開數據庫,並創建了「DB-指針」:錯誤的
dbHelper = new DbAdapter(this);
dbHelper.open();
的logcat:
02-22 23:11:25.560: E/AndroidRuntime(15442): FATAL EXCEPTION: main
02-22 23:11:25.560: E/AndroidRuntime(15442): Process: com.example.Traffic, PID: 1544202-22 23:11:25.560: E/AndroidRuntime(15442): java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/data/com.example.Traffic/databases/dbtrip
02-22 23:11:25.560: E/AndroidRuntime(15442): at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
02-22 23:11:25.560: E/AndroidRuntime(15442): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1156)
02-22 23:11:25.560: E/AndroidRuntime(15442): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
02-22 23:11:25.560: E/AndroidRuntime(15442): at com.database.trip.DbAdapter.fetchVehiclesByCod(DbAdapter.java:240)
02-22 23:11:25.560: E/AndroidRuntime(15442): at com.example.Traffic.Mappa.vehicleParameters(Mappa.java:937)
02-22 23:11:25.560: E/AndroidRuntime(15442): at com.example.Traffic.Mappa.access$1(Mappa.java:936)
02-22 23:11:25.560: E/AndroidRuntime(15442): at com.example.Traffic.Mappa$1.onItemSelected(Mappa.java:717)
02-22 23:11:25.560: E/AndroidRuntime(15442): at android.widget.AdapterView.fireOnSelected(AdapterView.java:896)
02-22 23:11:25.560: E/AndroidRuntime(15442): at android.widget.AdapterView.access$200(AdapterView.java:51)
02-22 23:11:25.560: E/AndroidRuntime(15442): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:864)
02-22 23:11:25.560: E/AndroidRuntime(15442): at android.os.Handler.handleCallback(Handler.java:733)
02-22 23:11:25.560: E/AndroidRuntime(15442): at android.os.Handler.dispatchMessage(Handler.java:95)
02-22 23:11:25.560: E/AndroidRuntime(15442): at android.os.Looper.loop(Looper.java:136)
02-22 23:11:25.560: E/AndroidRuntime(15442): at android.app.ActivityThread.main(ActivityThread.java:5336)
02-22 23:11:25.560: E/AndroidRuntime(15442): at java.lang.reflect.Method.invokeNative(Native Method)
這不是一個'NullPointerException'在你的堆棧跟蹤。你是如何得出你的指針變爲空的結論的?你真的看了嗎?對我來說,它看起來像對象仍然存在,它剛剛關閉,無法使用。 –
'java.lang.IllegalStateException:嘗試重新打開一個已經封閉的對象:SQLiteDatabase:/數據/數據/ com.example.Traffic /數據庫/ dbtrip'。在使用之前,您必須(重新)打開數據庫。 –
@MATTI我在onRestart,onResume中檢查過它,並且在onItemSelected中它變成了「not open」(我寫了null,但真實情況是「NOT OPEN」)。我用isOpen()檢查它。 – Adamz