0

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();
}

データベース ヘルパー クラスの Update メソッドを次に示します。

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

4 に答える 4

1

おそらく、更新の制約に違反していますか? DBコードを見ずに推測するだけです。

編集

行ID変数を囲む単一引用符を失います。これにより、DBはそれを文字列として扱い、数値と比較した文字列は失敗します。

于 2012-05-12T00:45:33.247 に答える
0

あなたのコードを私のコンピューターでテストします。

更新方法は正常に機能します。

したがって、より多くのコードを投稿する必要があると思います。

またはロジックを確認する必要があります。

于 2012-05-12T00:32:54.090 に答える
0

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:28:08.067 に答える
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 を String 値に変換するだけです。

于 2012-05-12T00:43:21.210 に答える