我在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();
}
});
我应该在此代码中进行哪些更改,以便以适当的方式设置点击侦听器。
答案 0 :(得分:0)
所以在你的代码中存在一些问题。起初在这里:
c = myDbHelper.query(myDbHelper.DB_PATH +"/MainTable", ...);
作为query()方法的第一个参数是“raw”tablename,所以你不能分配数据库的完整路径(如果它不是真正的tablename ...),那就错了。只需像这样分配 MainTable :
c = myDbHelper.query("MainTable", null, null, null, null, null, null);
然后你从数据库中获取数据的逻辑根本就不好。您只为您的小部件分配了一次,而不是更多。它们永远不会刷新,您需要多次调用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的“getters”方法时,我建议您使用列名来获取列索引:
myques.setText(c.getString(c.getColumnIndex("columnName")));