0

我希望这是一个非常基本的东西,我只是没有看到 - 但我想知道为什么以下调用更新客户端的方法的语句会在更新方法的返回行导致 NullPointerException。

如果它有助于知道,我有插入和选择工作正常,通过调试我知道更新语句在执行之前存储了所有三个变量,但从不执行。

方法调用

public void onSaveButtonClick(View v) {

    DBAdapter db = new DBAdapter(this);

    // Create and set fields
    EditText nameField = (EditText) findViewById(R.id.EditText_Name);
    EditText emailField = (EditText) findViewById(R.id.EditText_Email);

    name = nameField.toString();
    email = emailField.toString();

    db.updateClient(_id, "Test Name", "Test Email");
    Toast.makeText(PTViewClient.this,"TODO: Save Button Functionality", Toast.LENGTH_SHORT).show();
}

更新客户端方法抛出 NullPointerException

        public boolean updateClient(long clientID, String name, String email) 
    {
        ContentValues args = new ContentValues();
        args.put(KEY_CLIENT_NAME, name);
        args.put(KEY_CLIENT_EMAIL, email);
        return db.update(DATABASE_CLIENTS, args, KEY_CLIENT_ID + "=" + clientID, null) > 0;
    }

堆栈跟踪

05-15 12:47:02.978: E/AndroidRuntime(22110): FATAL EXCEPTION: main

05-15 12:47:02.978: E/AndroidRuntime(22110): java.lang.IllegalStateException: Could not execute method of the activity
05-15 12:47:02.978: E/AndroidRuntime(22110):    at android.view.View$1.onClick(View.java:3599)
05-15 12:47:02.978: E/AndroidRuntime(22110):    at android.view.View.performClick(View.java:4204)
05-15 12:47:02.978: E/AndroidRuntime(22110):    at android.view.View$PerformClick.run(View.java:17355)
05-15 12:47:02.978: E/AndroidRuntime(22110):    at android.os.Handler.handleCallback(Handler.java:725)
05-15 12:47:02.978: E/AndroidRuntime(22110):    at android.os.Handler.dispatchMessage(Handler.java:92)
05-15 12:47:02.978: E/AndroidRuntime(22110):    at android.os.Looper.loop(Looper.java:137)
05-15 12:47:02.978: E/AndroidRuntime(22110):    at android.app.ActivityThread.main(ActivityThread.java:5041)
05-15 12:47:02.978: E/AndroidRuntime(22110):    at java.lang.reflect.Method.invokeNative(Native Method)
05-15 12:47:02.978: E/AndroidRuntime(22110):    at java.lang.reflect.Method.invoke(Method.java:511)
05-15 12:47:02.978: E/AndroidRuntime(22110):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-15 12:47:02.978: E/AndroidRuntime(22110):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-15 12:47:02.978: E/AndroidRuntime(22110):    at dalvik.system.NativeStart.main(Native Method)
05-15 12:47:02.978: E/AndroidRuntime(22110): Caused by: java.lang.reflect.InvocationTargetException
05-15 12:47:02.978: E/AndroidRuntime(22110):    at java.lang.reflect.Method.invokeNative(Native Method)
05-15 12:47:02.978: E/AndroidRuntime(22110):    at java.lang.reflect.Method.invoke(Method.java:511)
05-15 12:47:02.978: E/AndroidRuntime(22110):    at android.view.View$1.onClick(View.java:3594)
05-15 12:47:02.978: E/AndroidRuntime(22110):    ... 11 more
05-15 12:47:02.978: E/AndroidRuntime(22110): Caused by: java.lang.NullPointerException
05-15 12:47:02.978: E/AndroidRuntime(22110):    at com.personaltrainer.DBAdapter.updateClient(DBAdapter.java:173)
05-15 12:47:02.978: E/AndroidRuntime(22110):    at com.personaltrainer.PTViewClient.onSaveButtonClick(PTViewClient.java:124)
05-15 12:47:02.978: E/AndroidRuntime(22110):    ... 14 more
4

3 回答 3

0

只需在调用之前检查 db 和 _id 是否为空指针

db.updateClient(_id, "Test Name", "Test Email");
于 2013-05-15T18:04:04.033 回答
0

用这种方式

return db.update(DATABASE_CLIENTS,  KEY_CLIENT_ID + "=" + clientID, null) > 0;
于 2013-05-15T18:10:15.023 回答
0

你需要打开你的数据库

DBAdapter db = new DBAdapter(this);
db.open();
于 2013-05-15T18:28:37.127 回答