我的问题是如何调用这样的方法。我已经知道如何实现它。下面是方法内容:
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;
我的问题在于调用这个 updateDebt 方法。
想象一个带有四个字段和一个更新按钮的对话框。这些字段预先填充了表格数据。用户更改字段数据并点击更新,表应该更改。
这是调用之前的代码。请记住,我是通过 onListItemClick 内的对话框中的 onClick 调用它的。
(我已经编辑了很多不相关的东西)
List<Debt> values;
MyArrayAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.debts);
datasource = new DebtDataSource(this);
datasource.open();
values = datasource.getAllDebt();
adapter = new MyArrayAdapter(this, values);
setListAdapter(adapter);
}
protected void onListItemClick(ListView l, View v, final int position, long id) {
Debt item = values.get(position);
final long boxId = item.getId();
final String BoxName = item.getName();
final String BoxBalance = item.getBalance();
final String BoxApr = item.getApr();
final String BoxPayment = item.getPayment();
// (edited out: setting up EditText fields here with data from above)
// 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);
values = datasource.getAllDebt();
adapter.notifyDataSetChanged();
dialog.dismiss();
}
});
dialog.show();
}
简单地说,当我点击更新时没有任何反应。对话框消失了,就是这样。logcat中什么都没有。我已经在 updateDebt() 方法中的更新方法之前注销了变量。我已经把它们烤回来了,所有的变量都完美匹配。数据库没有改变!这几天苦苦挣扎......