2013-04-12 75 views
0

我正在編寫一個程序,它需要活動A將數據寫入數據庫,而活動B則從數據庫讀取數據。我擴展SQLiteOpenHelper類作爲DatabaseHelper,我得到我的活動數據庫這樣:在不同活動之間共享數據庫

SQLiteOpenHelper dbHelper = new DatabaseHelper(this, "classtableDatabase", null, 1); 
SQLiteDatabase db = dbHelper.getWritableDatabase(); 

它工作在活動很好。 當我嘗試打開由活動A的活動B在同樣的方式創建的數據庫,它失敗了,我得到這些錯誤消息:

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{cn.square2.iscut/cn.square2.iscut.ClassTableDetails}: java.lang.NullPointerException 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1891) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) 
at android.app.ActivityThread.access$600(ActivityThread.java:127) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4441) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221) 
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:157) 
at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:231) 
at cn.square2.iscut.ClassTableDetails.<init>(ClassTableDetails.java:28) 
at java.lang.Class.newInstanceImpl(Native Method) 
at java.lang.Class.newInstance(Class.java:1319) 
at android.app.Instrumentation.newActivity(Instrumentation.java:1023) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1882) 
... 11 more 

我應該怎麼做才能解決這個問題?感謝您的幫助!

+1

確保你'this'指的是應用程序上下文而不是活動上下文。並請張貼您的代碼。 – minhaz

+0

@minhaz:爲什麼應用程序上下文而不是活動上下文?在大多數情況下,活動環境是好的,儘管沒有進一步的代碼,很難說。 – Squonk

+0

您是否在'Activity' A和B中使用相同的代碼打開數據庫?你是否正在關閉數據庫'活動'A當你移動到'活動'乙.. –

回答

0

我有同樣的問題。您不需要執行任何操作,只需從您的MAIN活動以外的活動中對數據庫進行靜態引用即可。

+0

謝謝!它確實有用! – SCHENKERX