2016-02-27 16 views
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) 
+3

這不是一個'NullPointerException'在你的堆棧跟蹤。你是如何得出你的指針變爲空的結論的?你真的看了嗎?對我來說,它看起來像對象仍然存在,它剛剛關閉,無法使用。 –

+0

'java.lang.IllegalStateException:嘗試重新打開一個已經封閉的對象:SQLiteDatabase:/數據/數據/ com.example.Traffic /數據庫/ dbtrip'。在使用之前,您必須(重新)打開數據庫。 –

+0

@MATTI我在onRestart,onResume中檢查過它,並且在onItemSelected中它變成了「not open」(我寫了null,但真實情況是「NOT OPEN」)。我用isOpen()檢查它。 – Adamz

回答

0

問題是這樣的例外,它不能重新打開數據庫。當您關閉DBHelper並重新使用它時,會發生這種情況。

相關問題