我在 LogCat 中得到这个:
05-20 17:16:34.721: E/AndroidRuntime(30461): FATAL EXCEPTION: main
05-20 17:16:34.721: E/AndroidRuntime(30461): java.lang.NullPointerException
05-20 17:16:34.721: E/AndroidRuntime(30461): at android.database.sqlite.SQLiteStatement.releaseAndUnlock(SQLiteStatement.java:290)
05-20 17:16:34.721: E/AndroidRuntime(30461): at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:96)
05-20 17:16:34.721: E/AndroidRuntime(30461): at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1810)
05-20 17:16:34.721: E/AndroidRuntime(30461): at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1761)
05-20 17:16:34.721: E/AndroidRuntime(30461): at com.kickinglettuce.debtplannerpro.DebtDataSource.updateDebt(DebtDataSource.java:130)
05-20 17:16:34.721: E/AndroidRuntime(30461): at com.kickinglettuce.debtplannerpro.manageDebts$4.onClick(manageDebts.java:184)
05-20 17:16:34.721: E/AndroidRuntime(30461): at android.view.View.performClick(View.java:3511)
05-20 17:16:34.721: E/AndroidRuntime(30461): at android.view.View$PerformClick.run(View.java:14105)
05-20 17:16:34.721: E/AndroidRuntime(30461): at android.os.Handler.handleCallback(Handler.java:605)
05-20 17:16:34.721: E/AndroidRuntime(30461): at android.os.Handler.dispatchMessage(Handler.java:92)
05-20 17:16:34.721: E/AndroidRuntime(30461): at android.os.Looper.loop(Looper.java:137)
05-20 17:16:34.721: E/AndroidRuntime(30461): at android.app.ActivityThread.main(ActivityThread.java:4447)
05-20 17:16:34.721: E/AndroidRuntime(30461): at java.lang.reflect.Method.invokeNative(Native Method)
05-20 17:16:34.721: E/AndroidRuntime(30461): at java.lang.reflect.Method.invoke(Method.java:511)
05-20 17:16:34.721: E/AndroidRuntime(30461): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-20 17:16:34.721: E/AndroidRuntime(30461): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-20 17:16:34.721: E/AndroidRuntime(30461): at dalvik.system.NativeStart.main(Native Method)
这是与之相关的代码:
protected void onListItemClick(ListView l, View v, int position, long id) {
List<Debt> values = datasource.getAllDebt();
datasource.open();
Debt item = values.get(position);
final long boxId = item.getId();
// final String BoxId = String.valueOf(boxId);
final String BoxName = item.getName();
final String BoxBalance = item.getBalance();
final String BoxApr = item.getApr();
final String BoxPayment = item.getPayment();
// set up dialog
final Dialog dialog = new Dialog(manageDebts.this);
dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Edit Debt Details");
dialog.setCancelable(true);
// set up text
TextView tv1 = (TextView) dialog.findViewById(R.id.textView1);
TextView tv2 = (TextView) dialog.findViewById(R.id.textView2);
TextView tv3 = (TextView) dialog.findViewById(R.id.textView3);
TextView tv4 = (TextView) dialog.findViewById(R.id.textView4);
EditText et1 = (EditText) dialog.findViewById(R.id.editText1);
EditText et2 = (EditText) dialog.findViewById(R.id.editText2);
EditText et3 = (EditText) dialog.findViewById(R.id.editText3);
EditText et4 = (EditText) dialog.findViewById(R.id.editText4);
tv1.setText("Debt Description");
tv2.setText("Balance");
tv3.setText("APR");
tv4.setText("Monthly Payment");
et1.setText(BoxName);
et2.setText(BoxBalance);
et3.setText(BoxApr);
et4.setText(BoxPayment);
// set up button
Button button = (Button) dialog.findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
datasource.updateDebt(Long.valueOf(boxId), BoxName, BoxBalance, BoxApr,
BoxPayment);
dialog.dismiss();
}
});
datasource.close();
dialog.show();
}
我的数据库类中的更新方法:
public boolean updateDebt(long updateId, String debtName, String debtTotal,
String debtApr, String paymentGoal) {
ContentValues values = new ContentValues();
values.put(MySQLiteHelper.COLUMN_DEBT_NAME, debtName);
values.put(MySQLiteHelper.COLUMN_DEBT_TOTAL, debtTotal);
values.put(MySQLiteHelper.COLUMN_APR, debtApr);
values.put(MySQLiteHelper.COLUMN_PAYMENT, paymentGoal);
String whereClause = MySQLiteHelper.COLUMN_ID + " = ?";
String[] whereArgs = new String[]{ String.valueOf(updateId) };
return database.update(MySQLiteHelper.TABLE_DEBT,
values, whereClause, whereArgs) > 0;
}
有什么建议么?