使用按钮从数据库中检索数据

时间:2013-04-07 08:41:36

标签: android

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

            });

我应该在此代码中进行哪些更改,以便以适当的方式设置点击侦听器。

1 个答案:

答案 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")));