【发布时间】:2012-05-28 11:28:52
【问题描述】:
我的问题是如何调用这样的方法。我已经知道如何实现它。以下是方法内容:
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() 方法中的更新方法之前注销了变量。我已经把它们烤回来了,所有的变量都完美匹配。数据库没有改变! 这几天苦苦挣扎....
【问题讨论】:
-
你还没有展示你的数据库结构......你可能违反了约束吗?
-
没有任何迹象或我可以看到的任何冲突。所有列也设置为 Not Null。
-
所以 onClick() 被调用,因为那是对话框被关闭的地方。你通过代码调试了吗?
-
尝试将更新方法更改为使用
updateWithOnConflict并添加参数CONFLICT_FAIL... 如果存在某种约束违规而不是静默失败,则会引发错误跨度> -
我已经从方法的开始到结束注销了每个变量(还没有真正记录返回的布尔值)。变量都是应有的。您看到的 onClick 是否有问题?