用于提交数据库错误的按钮

时间:2013-07-21 15:04:49

标签: android sqlite

我想通过填写表单将数据插入到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)

任何人都知道这似乎是什么问题?请帮助,谢谢

1 个答案:

答案 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(名称值对)。

如果需要,您可以将内容值放入一个包中,并让异步任务或内容提供者提取它们,如果在插入之前还有许多其他步骤需要完成。

希望这会有所帮助。如果适合您,请将此标记为正确答案。

度过美好的一天。