2013-05-15 54 views
0

我希望這是真正基本的東西,我只是沒有看到 - 但我想知道爲什麼以下調用更新客戶端的方法的語句在返回時導致NullPointerException更新方法的線。SQLite更新行上的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 
+0

我想你'db'是'null'和使用'nameField.getText()的toString(); '而不是直接在Edittext上調用'toString()'。 'toString()'Edittext將給出Edittext的字符串表示,但不包含原始文本 – Pragnani

回答

0

你需要打開你的數據庫

DBAdapter db = new DBAdapter(this); 
db.open(); 
+0

簡單步驟的經典忽略!謝謝@Hoan Nguyen –

0

只是檢查db和_id它們是否正在調用

前空指針。
db.updateClient(_id, "Test Name", "Test Email"); 
0

用這種方式

return db.update(DATABASE_CLIENTS, KEY_CLIENT_ID + "=" + clientID, null) > 0;