我想在android中可靠地編寫代碼,因此我爲不同的目的製作了不同的類,例如用於與db連接的單獨類,創建表以及用於插入更新和刪除的類。現在我遇到了一個SQLiteDatabase [mDb]的問題:我有一個類,其中有getters和setter的表列,即recipient.class。現在我要插入到DATAS數據庫,所以我做了這樣的插入:Android中使用數據庫時出現空異常
public long insert(Recipient recipient, String[] images){
ContentValues initialValues = new ContentValues();
initialValues.put(FLD_RECIPIENT_ID, Recipient.getFldRecipientId());
initialValues.put(FLD_INFO, Recipient.getFldInfo());
initialValues.put(FLD_LATITUDE, Recipient.getFldLatitude());
initialValues.put(FLD_LONGITUDE, Recipient.getFldLongitude());
for(int i=0;i<images.length;i++){
if(images[i]!=null){
initialValues.put("FLD_IMAGE_URL"+(i+1), images[i]);
}
}
return mDb.insert(DATABASE_TABLE, null, initialValues);
}
當我調試了initialValues所有值都設置並且當執行mDb.insert退出顯示nullPointException和MDB空值。我不明白爲什麼會這樣。如果有人能幫助我呢? 此外,我已經初始化MDB爲:
private SQLiteDatabase mDb;
的logcat:
01-01 11:11:27.963: E/AndroidRuntime(992): FATAL EXCEPTION: main
01-01 11:11:27.963: E/AndroidRuntime(992): java.lang.NullPointerException
01-01 11:11:27.963: E/AndroidRuntime(992): at com.example.android.photobyintent.DbReceipient.insert(DbReceipient.java:43)
01-01 11:11:27.963: E/AndroidRuntime(992): at com.example.android.photobyintent.AddRecipient.insertIntoDb(AddRecipient.java:451)
01-01 11:11:27.963: E/AndroidRuntime(992): at com.example.android.photobyintent.AddRecipient$4.onClick(AddRecipient.java:409)
01-01 11:11:27.963: E/AndroidRuntime(992): at android.view.View.performClick(View.java:4202)
01-01 11:11:27.963: E/AndroidRuntime(992): at android.view.View$PerformClick.run(View.java:17340)
01-01 11:11:27.963: E/AndroidRuntime(992): at android.os.Handler.handleCallback(Handler.java:725)
01-01 11:11:27.963: E/AndroidRuntime(992): at android.os.Handler.dispatchMessage(Handler.java:92)
01-01 11:11:27.963: E/AndroidRuntime(992): at android.os.Looper.loop(Looper.java:137)
01-01 11:11:27.963: E/AndroidRuntime(992): at android.app.ActivityThread.main(ActivityThread.java:5039)
01-01 11:11:27.963: E/AndroidRuntime(992): at java.lang.reflect.Method.invokeNative(Native Method)
01-01 11:11:27.963: E/AndroidRuntime(992): at java.lang.reflect.Method.invoke(Method.java:511)
01-01 11:11:27.963: E/AndroidRuntime(992): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-01 11:11:27.963: E/AndroidRuntime(992): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-01 11:11:27.963: E/AndroidRuntime(992): at dalvik.system.NativeStart.main(Native Method)
在使用'mDb'插入數據之前,只需檢查它的** null **,如果它的null值爲null,那麼在Writable模式下打開數據庫。 – user370305
'私有SQLiteDatabase mDb;'它是一個聲明。定義在哪裏? – user370305
你有清單中的讀/寫權限嗎? plz顯示logcat。 – MGDroid