2011-08-23 61 views
0

爲什麼這兩行代碼會拋出一個NPE?空指針創建SQLite數據庫

SQLiteDatabase db; 
db = openOrCreateDatabase("TestingData.db", SQLiteDatabase.CREATE_IF_NECESSARY, null); 

堆棧跟蹤:

08-23 10:33:14.285: ERROR/AndroidRuntime(1001): Caused by: java.lang.NullPointerException 
08-23 10:33:14.285: ERROR/AndroidRuntime(1001):  at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) 
08-23 10:33:14.285: ERROR/AndroidRuntime(1001):  at org.*****.android.CopyOfSQLLite.data(CopyOfSQLLite.java:14) 
08-23 10:33:14.285: ERROR/AndroidRuntime(1001):  at org.******.android.*****.****(****.java:200) 
08-23 10:33:14.285: ERROR/AndroidRuntime(1001):  at org.********.android.****.onCreate(DashboardPage.java:25) 
08-23 10:33:14.285: ERROR/AndroidRuntime(1001):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-23 10:33:14.285: ERROR/AndroidRuntime(1001):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
+0

你確定錯誤到了嗎? –

+0

如果將最後一個設置爲null,爲什麼要使用3個參數的方法?還有一種方法只適用於參數。 (http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#openOrCreateDatabase(java.lang.String,%20android.database.sqlite.SQLiteDatabase.CursorFactory)) – RoflcoptrException

回答

1

您的ContextWrapper沒有基礎上下文。很有可能你沒有在正確的地方調用這個方法,但是如果沒有更多的代碼,我不能再多說了。

+0

所以你可以說怎麼做你解決這個問題? – kosala

0

關於Android的好處是,它是open source。因此,我們可以看到,openOrCreateDatabase()就像實現:

public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory) { 
    return mBase.openOrCreateDatabase(name, mode, factory); 
} 

的唯一途徑,我可以看到這個代碼拋出NPE是,如果mBase爲null。根據你的通話習慣,我假設你的課程來自android.content.ContextWrapper?如果是這樣,你是否確保當你的類被實例化時設置了基本上下文(mBase)?如果你不是,那麼這就是導致問題的原因。