0

我的问题是如何调用这样的方法。我已经知道如何实现它。下面是方法内容:

 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() 方法中的更新方法之前注销了变量。我已经把它们烤回来了,所有的变量都完美匹配。数据库没有改变!这几天苦苦挣扎......

4

2 回答 2

0

试试这个:

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);
    return mDb.update(MySQLiteHelper.TABLE_DEBT, values, MySQLiteHelper.COLUMN_ID + "=" + updateId, null) > 0;

并检查返回的布尔值。

于 2012-05-22T04:46:36.407 回答
0

我终于想出了答案。这就是我正在做的事情:

  1. 为特定债务行中的每一列创建一个字符串变量。
  2. 使用该变量预先填充对话框中的字段。
  3. 然后将相同的变量传递给更新方法

例如(简化):

 String name = null;
 EditText et;

 name = debt.getName();
 et.setText(name);

 onclick {
     datasource.updateDebt(name);
 }

我错过了 2 和 3 之间的步骤。在 onClick 方法中再次设置变量。一旦用户按下更新按钮,该变量必须重新设置为 EditText 字段的新值。像这样:

 String name = null;
 EditText et;

 name = debt.getName();
 et.setText(name);
 onclick {
     ***name = et.getText().toString();***
     datasource.updateDebt(name);
 }
于 2012-05-24T16:23:37.737 回答