2

這裏是我嘗試訪問數據庫:安卓:在getWritableDatabase(NullPointerException異常)

UserDataAdapter dbHelper = new UserDataAdapter(this); 
dbHelper.open(); 
dbHelper.createNetwork(network); 
dbHelper.close(); 

UserDataAdapter.java:

public UserDataAdapter open() throws SQLException { 
     dbHelper = new DatabaseHelper(context); // of class DatabaseHelper 
     database = dbHelper.getWritableDatabase(); // this line!! 
     return this; 
    } 

DatabaseHelper.java:

public DatabaseHelper(Context context) { 
     super(context, Defines.DATABASE_NAME, null, Defines.DATABASE_VERSION); 
    } 

@Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(Defines.DATABASE_CREATE_TAXI_SERVICE_DATABASE); 
    } 

崩潰: 09-13 18:12:33.119:E

RROR/AndroidRuntime(7488): FATAL EXCEPTION: main 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488): java.lang.NullPointerException 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):  at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):  at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98) 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):  at com.basind.testapp.database.UserDataAdapter.open(UserDataAdapter.java:29) 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):  at com.basind.testapp.FetchNetworks.addToDatabase(FetchNetworks.java:107) 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):  at com.basind.testapp.FetchNetworks.access$1(FetchNetworks.java:105) 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):  at com.basind.testapp.FetchNetworks$1.onResponseReceived(FetchNetworks.java:75) 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):  at com.basind.testapp.async.CallbackWrapper.run(CallbackWrapper.java:15) 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):  at android.os.Handler.handleCallback(Handler.java:587) 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):  at android.os.Handler.dispatchMessage(Handler.java:92) 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):  at android.os.Looper.loop(Looper.java:145) 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):  at android.app.ActivityThread.main(ActivityThread.java:4937) 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):  at java.lang.reflect.Method.invoke(Method.java:521) 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
09-13 18:12:33.119: ERROR/AndroidRuntime(7488):  at dalvik.system.NativeStart.main(Native Method) 

其他詳情:

  • 目標:Android的7
  • 測試設備:HTC Desire的
+0

你在哪裏實例化UserDataAdapter?你能否包含你實例化這個類的類的代碼? @Adil似乎是正確的,你的上下文是無效的。我們只需要明白爲什麼。 – momo

回答

4

確保,如果你的Context正確設定與否。

private Context context; 
private SQLiteDatabase database; 
private DatabaseHelper dbHelper; 

public UserDataAdapter(Context context) { 
    this.context = context; 
} 

public UserDataAdapter open() throws SQLException 
{ 
    dbHelper = new DatabaseHelper(context); 
    database = dbHelper.getWritableDatabase(); 
    return this; 
} 
+0

我有相同的代碼...上下文設置正確(在調用open()之前進行檢查。上下文是FetchNetworks,它擴展了Activity。 –

1

僅供參考:我有一個標準的ContentProvider實現的NullPointerException錯誤。我終於解決了它,並且密鑰與清單文件中的上下文/意圖有關。

最後,我從我的清單中的活動中錯過了這一行。

<data android:mimeType="vnd.android.cursor.dir/vnd.pmp.smsmessage" /> 

查看我正在談論的NotePad示例。此外,我更喜歡使用這裏的結構http://www.vogella.com/articles/AndroidSQLite/article.html然而,因爲他的tut是爲3.0設計的,所以必須拋棄所有裝載器的東西來實現2.2 ...

將它放入我創建的數據庫後,我可以插入行。我簡單地使用onCreate對我的默認活動進行了測試。

ContentValues values = new ContentValues(); 
values.put("somefieldname","somevalue"); 
values.put("otherfieldname","othervalue"); 
getContentResolver().insert(MyProvider.CONTENT_URI, values); 
0

當您嘗試從服務或活動構造函數打開數據庫時,會出現這種情況。嘗試將open打開到onCreate()。

相關問題