SQLite更新未应用Android

时间:2012-05-12 00:30:01

标签: android sqlite listview

当我点击ListItem时,它会打开一个包含4个EditText字段的自定义对话框。根据单击的行,使用当前数据设置字段。该对话框的目的是允许用户更新数据(它是一个财务应用程序)。当用户在对话框中单击“提交”时,我实际上无法应用更新。我运行时,应用程序中没有错误。这是onclick方法:

protected void onListItemClick(ListView l, View v, int position, long id) {

    List<Debt> values = datasource.getAllDebt();
    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
    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);

    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(boxId, BoxName, BoxBalance, BoxApr,
                    BoxPayment);

            dialog.dismiss();

        }
    });

    dialog.show();
}

我的数据库助手类中的更新方法如下所示:

public boolean updateDebt(long updateId, String debt_name, String debt_total, String apr, String payment) 
{
    ContentValues values = new ContentValues();
    values.put(MySQLiteHelper.COLUMN_ID, updateId);
    values.put(MySQLiteHelper.COLUMN_DEBT_NAME, debt_name);
    values.put(MySQLiteHelper.COLUMN_DEBT_TOTAL, debt_total);
    values.put(MySQLiteHelper.COLUMN_APR, apr);
    values.put(MySQLiteHelper.COLUMN_PAYMENT, payment);
    return database.update(MySQLiteHelper.TABLE_DEBT, values, MySQLiteHelper.COLUMN_ID + " = " + updateId, null) > 0;
}

我已经验证了COLUMN_ID和updateId指向ListView和SQL数据库中的正确行。

有人看到我不喜欢的东西吗?

4 个答案:

答案 0 :(得分:1)

也许您违反了更新的约束?只是一个没有看到DB代码的猜测。

修改

丢失行id变量周围的单引号,即使DB将其视为字符串,与数字相比较的字符串是失败。

答案 1 :(得分:0)

我在计算机上测试你的代码。

更新方法正常。

所以我认为你应该发布更多代码。

或者你应该检查你的逻辑。

答案 2 :(得分:0)

这会更好用:

String whereClause = MySQLiteHelper.COLUMN_ID + " = ?";
String[] whereArgs = new String[]{ String.valueOf(updateId) };
return database.update(MySQLiteHelper.TABLE_DEBT,
        values, whereClause, whereArgs) > 0;

String.valueOf()调用只是将ID转换为字符串值。

答案 3 :(得分:0)

我错过了2到3之间的一步。

再次设置变量 内部 onClick方法。用户按下更新按钮后,变量必须重新设置到EditText字段的值。像这样(简化版):

 String name = null;
 EditText et;

 name = debt.getName();
 et.setText(name);
 onclick {
     ***name = et.getText().toString();***
     datasource.updateDebt(name);
 }