0

我正在开发一个测验应用程序。在一个部分中,我从我的 sqlite DB 收到了一个光标。它包含问题的 ID 和问题的顺序。一旦我弄清楚这个循环,我想通过将问题 ID 链接到带有查询的 sql 来基于这些数据构建一个测验活动。

基本上,我希望能够根据光标位置和订单号变量(1、2、3 等)为第一个问题构建一个活动。每次他们回答问题并单击按钮时,它将迭代循环并转到下一个光标项目和订单号(问题)。

我被困在如何做到这一点上。

Cursor questionID_query = dbHelper.getQuestionIDListFromChapterID(chapter_id);

我知道我必须以某种方式循环,基于游标计数。

for(int i=0; i < questionID_query.getCount(); i++){
    // loop through cursor
    //build question list
    //listen for button click
}

基本上任何关于如何实现这一点的提示都会非常好,我已经筋疲力尽了。

4

2 回答 2

0

我认为最好的方法,并且像魅力一样工作。

public ArrayList<HashMap<String, String>> readRowSQL(String rawSQL, String[] rawSQLSelectionArguments) {
        ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
        Cursor cursor = this.db.rawQuery(rawSQL, rawSQLSelectionArguments);
        this.colCount = cursor.getColumnCount();
        this.rowCount = cursor.getCount();
        if (cursor.moveToFirst()) {
            do {
                HashMap<String, String> col = new HashMap<String, String>();
                int size =cursor.getColumnCount();
                for (int i = 0; i < size; i++) {
                    col.put(cursor.getColumnName(i), cursor.getString(i));
                }
                list.add(col);
            } while (cursor.moveToNext());
        }
        if (cursor != null && !cursor.isClosed()) {
            cursor.close();
        }
        return list;
    }
于 2013-08-23T04:33:30.487 回答
0

尝试这个:

当您返回游标时,请在返回之前先执行此操作:

cursor.moveToFirst();

当光标返回给您时,现在处于活动状态,然后从光标获取问题并设置为 textviews 和所有。并将其设置为 textviews 后,只需将光标移动到下一个问题,例如:

cursor.moveToNext();

因此,当您单击下一步按钮时,只需从光标中获取值,然后再次使其移动到下一步。这样您每次单击按钮时都可以得到下一个问题。

所以它就像:

在 onCreate() 方法中获取 Cursor

Cursor questionID_query = dbHelper.getQuestionIDListFromChapterID(chapter_id);
questionID_query.moveToFIrst();
txtQuestion.settext(questionID_query.getString(QuestionColumnNo));
questionID_query.moveToNext();

在 ButtonClick 事件中:

txtQuestion.settext(questionID_query.getString(QuestionColumnNo));
questionID_query.moveToNext();

希望能帮助到你!!

于 2013-08-23T04:33:38.957 回答