【问题标题】:using Buttons to retrieve data from database使用按钮从数据库中检索数据
【发布时间】:2013-04-07 08:41:35
【问题描述】:

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

            });

我应该在此代码中进行哪些更改才能以正确的方式设置点击侦听器。

【问题讨论】:

  • 怎么知道光标没有移动?您不会在任何地方更新 UI。
  • 我是一名安卓初学者。 moveToNext() 方法会将光标移动到下一组数据吗? setText 方法是否会再次为下一次检索数据设置文本?

标签: android


【解决方案1】:

所以在您的代码中存在一些问题。首先在这里:

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

因为 query() 方法的第一个参数是“原始”表名,所以你不能在那里分配你的数据库的完整路径(如果它不是真正的表名......),这是错误的。只需像这样分配 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")));

【讨论】:

  • 谢谢先生!!实际上,我正在尝试开发一个小型测验应用程序,在其中我使用数据库来保存所有问题及其多项选择选项。我检索每个问题的数据。所以我创建了一个按钮 NextQuestion ,每当点击它时,下一组数据,它应该获取:)
  • @ArjunViswanathan 好的,所以请检查我的 asnwer 并像我提到的那样更新您的 onClick 方法。
  • 它的工作先生!再次非常感谢 :) 当我在 Query 方法中只分配我的表名时,它不起作用并且只有当我给出表名及其路径时它才起作用,这是我给它的原因
  • 我也使用了列索引方法 :) 使用索引而不是像 1,2,3,4 这样的 ID 有什么优势??
  • @ArjunViswanathan 如果您不了解列的投影并且您不知道,如果某个列正好位于 3 索引处或 4 处。那么基于列获取索引更有效名字,这样更安全。不客气,不要记得接受回答>}
猜你喜欢
  • 1970-01-01
  • 2014-12-31
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多