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 メソッドの呼び出しにあります。

更新ボタンのある 4 つのフィールドを持つダイアログを想像してください。フィールドにはテーブル データが事前に入力されています。ユーザーがフィールド データを変更し、更新をクリックすると、テーブルが変更されます。

これは、呼び出しの前に来るコードです。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() メソッド内の update メソッドの直前に変数をログアウトしました。私はそれらを乾杯しましたが、すべての変数が完全に一致しています。ただし、データベースは変更されません。何日もこれに苦労しています....

4

2 に答える 2

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 に答える
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 に答える