我想通过填写表单将数据插入到sqlite数据库表中的一行,单击提交按钮时出错。这是代码片段和logcat
public void callDialogConfirmation(){
AlertDialog.Builder confirm = new AlertDialog.Builder(Form.this);
confirm.setTitle("Please Confirm");
confirm.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
String inputanSavings = spinner1.getSelectedItem().toString();
String tglmsk = spinner2.getSelectedItem().toString();
SharedPreferences.Editor editor = someData.edit();
editor.putString("sharedString1", inputanSavings);
editor.putString("sharedString2", tglmsk);
editor.commit();
String inputSalary = salary.getText().toString();
dbHelper.createIncome("Routine Income",inputSalary);
Intent openStartingPoint = new Intent(Form.this, MainActivity.class);
startActivity(openStartingPoint);
}});
这是插入数据的方法
public long createIncome(String l, String n) {
ContentValues initialValues = new ContentValues();
initialValues.put(RLPE, l);
initialValues.put(RNPE, n);
initialValues.put(RBPE, m); // The m is the current date with Calendar library
return mDbP.insert(INCOME_TABLE, null, initialValues);
}
这是我点击“提交”按钮
后立即收到的错误 07-21 22:00:39.234: E/AndroidRuntime(971): FATAL EXCEPTION: main
07-21 22:00:39.234: E/AndroidRuntime(971): java.lang.NullPointerException
07-21 22:00:39.234: E/AndroidRuntime(971): at com.diarykeuanganmahasiswa.dkm.Form$1.onClick(Form.java:64)
07-21 22:00:39.234: E/AndroidRuntime(971): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:159)
07-21 22:00:39.234: E/AndroidRuntime(971): at android.os.Handler.dispatchMessage(Handler.java:99)
07-21 22:00:39.234: E/AndroidRuntime(971): at android.os.Looper.loop(Looper.java:123)
07-21 22:00:39.234: E/AndroidRuntime(971): at android.app.ActivityThread.main(ActivityThread.java:3683)
07-21 22:00:39.234: E/AndroidRuntime(971): at java.lang.reflect.Method.invokeNative(Native Method)
07-21 22:00:39.234: E/AndroidRuntime(971): at java.lang.reflect.Method.invoke(Method.java:507)
07-21 22:00:39.234: E/AndroidRuntime(971): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-21 22:00:39.234: E/AndroidRuntime(971): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-21 22:00:39.234: E/AndroidRuntime(971): at dalvik.system.NativeStart.main(Native Method)
任何人都知道这似乎是什么问题?请帮助,谢谢
答案 0 :(得分:0)
看起来您在共享首选项中存储来自UI的数据并尝试从ContentValues中检索它们。在您的UI中,您应该将值放入内容值并将其传递给插入。然后,在insert方法中检索这些值应该能够正确地获取它们。内容值是名称值对,即列的名称和列的值。
在您的UI活动中:
ContentValues cv;
...
//in your onClick method
cv = new ContentValues();
...
cv.put("inputanSavings", inputanSavings);
... etc, for each column.
Uri rowURI = cr.insert(yourURI,cv); // cv应该为每个列提供NvP(名称值对)。
如果需要,您可以将内容值放入一个包中,并让异步任务或内容提供者提取它们,如果在插入之前还有许多其他步骤需要完成。
希望这会有所帮助。如果适合您,请将此标记为正确答案。
度过美好的一天。