1

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

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

4

1 回答 1

0

看起来您将 UI 中的数据存储在共享首选项中,并尝试从 ContentValues 中检索它们。在您的 UI 中,您应该将您的值放入 Content Values 并将其传递给插入。然后在插入方法中检索这些值应该能够正确获取它们。Content Values 是一个名称值对,即列的名称和列的值。

在您的 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(名称值对)。

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

希望这可以帮助。如果对您有用,请将其标记为正确答案。

祝你有美好的一天。

于 2013-07-30T17:51:37.193 回答