0

Android アプリケーションでデータベースを接続しました。これでボタンが作成されました。ボタンをクリックすると、データベースのテーブルから次のデータが取得されます。カーソルがあり、コードに moveToFirst() および moveToNext() メソッドがあります。また、ボタンに onclick リスナーを設定しました。しかし、ボタンをクリックしたときの出力では、データベースから次のデータを取得していません

ボタンのクリックリスナーを設定しようとしたコードの一部をここに示します

 c=myDbHelper.query(myDbHelper.DB_PATH +"/MainTable",null, null, null, null,null, null);
        c.moveToFirst();

                 myques=(TextView)findViewById(R.id.question);
                 myrg=(RadioGroup)findViewById(R.id.rg1);
                 myc1=(RadioButton)findViewById(R.id.radio0);
                 myc2=(RadioButton)findViewById(R.id.radio1);
                 myc3=(RadioButton)findViewById(R.id.radio2);
                 myc4=(RadioButton)findViewById(R.id.radio3);
                 NxtQues=(Button)findViewById(R.id.button1); 

               myques.setText(c.getString(1));
               myc1.setText(c.getString(2));
               myc2.setText(c.getString(3));
               myc3.setText(c.getString(4));
               myc4.setText(c.getString(5));
               NxtQues.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View V)
                {

                    c.moveToNext();
                }

            });

クリックリスナーを適切な方法で設定するには、このコードにどのような変更を加える必要がありますか。

4

1 に答える 1

0

したがって、コードにはいくつかの問題があります。まずはこちら:

c = myDbHelper.query(myDbHelper.DB_PATH +"/MainTable", ...);

query() メソッドの最初のパラメーターは「生の」テーブル名であるため、データベースの完全なパスを割り当てることはできません (実際のテーブル名でない場合...)、それは間違っています。次のようにMainTableを割り当てるだけです。

c = myDbHelper.query("MainTable", null, null, null, null, null, null);

次に、データベースからデータをフェッチすることに関するロジックはまったく良くありません。ウィジェットに値を 1 回だけ割り当てました。更新されることはありません。ウィジェットのコンテンツを更新するには、setText() メソッドを何度でも呼び出す必要があります。実際には、それらを更新しません。

ロジックを次のように変更する必要があります。

@Override
public void onClick(View V) {
  if (c.moveToNext()) {
     myques.setText(c.getString(1));
     myc1.setText(c.getString(2));
     myc2.setText(c.getString(3));
     myc3.setText(c.getString(4));
     myc4.setText(c.getString(5));
  }
}

推奨事項: Cursor の「ゲッター」メソッドを使用している場合は、列名を使用して列のインデックスを取得することをお勧めします。

myques.setText(c.getString(c.getColumnIndex("columnName")));
于 2013-04-07T08:52:33.510 に答える