2012-03-07 3 views
0

Я использовал курсор на sqlite db для получения записей.Android Sqlite Cursur не возвращает правильные значения

Мой код выглядит следующим образом:

btnnext.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     displayQuestion(); 
    }); 
} 

private void displayQuestion() { 
    db.openDataBase(); 
    SQLiteDatabase sqlitedatabase = db.getWritableDatabase(); 

    Cursor cur; 
    cur = sqlitedatabase.rawQuery("select quiz_id, opt_ans from options" ,null); 
    cur.moveToFirst(); 
    db.close(); 

    radioGroup.removeAllViews(); 
    for (int i = 0; i <= 3; i++) { 
     l++; 
     Log.v("value of l",l+""); 
     radioButton = new RadioButton(this); 
     String str_opt = cur.getString(cur.getColumnIndex(Database_helper_class.OPT_ID)); 
     radioButton.setText(str_opt); 
     Log.v("value of l",l+""+str_opt); 
     radioButton.setId(i); 
     cur.moveToPosition(l); 
     radioGroup.addView(radioButton); 
    } 
} 

и журнал я получаю:

03-07 18:32:03.190: V/value of l(28903): 1video 
03-07 18:32:03.200: V/value of l(28903): 2 
03-07 18:32:03.210: V/value of l(28903): 2sound 
03-07 18:32:03.210: V/value of l(28903): 3 
03-07 18:32:03.221: V/value of l(28903): 3image 
03-07 18:32:03.231: V/value of l(28903): 4 
03-07 18:32:03.240: V/value of l(28903): 4word document 
03-07 18:32:05.561: V/value of l(28903): 5 
03-07 18:32:05.571: V/value of l(28903): 5video 
03-07 18:32:05.580: V/value of l(28903): 6 
03-07 18:32:05.590: V/value of l(28903): 6A process 
03-07 18:32:05.590: V/value of l(28903): 7 
03-07 18:32:05.601: V/value of l(28903): 7A system software 
03-07 18:32:05.601: V/value of l(28903): 8 
03-07 18:32:05.610: V/value of l(28903): 8A document 

и БД, которые я использую

opt_ans,"opt_id","quiz_id" 
    video,"1","1" 
    sound,"2","2" 
    image,"3","3" 
    word document,"4","4" 
    appliction,"5","5" 
    A process,"6","6" 
    A system software,"7","7" 
    A document,"8","8" 
    hgfhgfh,"9","9" 
    hgfhgf,"10","10" 
    tytrytr,"11","11" 
    ytrytrytr,"12","12" 
    tytrytrytr,"13","13" 
    tytrytryt,"14","14" 
    tytyt,"15","15" 
    ytytyt,"16","16" 
    ytytryt,"17","17" 
    tytytr,"18","18" 
    tytytryt,"19","19" 
    htghyt,"20","20" 

Теперь мой вопрос:

Почему я получаю v видео на 5-й и 9-й индексы, также имея разные значения по этим показателям?

+0

Было бы здорово, если бы вы могли очистить ваш код. Удалите все прокомментированные строки, поскольку они нам не интересны. Это облегчило бы нам читать ваш код таким образом. – WarrenFaith

ответ

1

SQL не гарантирует порядок возвращаемых строк, если вы не указали. В основном ваши результаты могут быть в случайном порядке. Таким образом, вы должны изменить свой запрос следующим образом:

cur = sqlitedatabase.rawQuery("select quiz_id, opt_ans from options order by quiz_id asc" ,null); 

EDIT
Кроме того, я думаю, вы не итерация курсором правильно, попробуйте следующее:

int i = 0; 
for (boolean hasItem = cur.moveToFirst(); hasItem; hasItem = cur.moveToNext()) { 
    if (i < 4) { 
     radioButton = new RadioButton(this); 
     String str_opt = cur.getString(cur.getColumnIndex(Database_helper_class.OPT_ID)); 
     radioButton.setText(str_opt); 
     radioButton.setId(i); 
     radioGroup.addView(radioButton); 
     Log.v("Value of button " + i + " is: " + str_opt); 
     i++; 
    } 
    else { 
     break; 
    } 
} 
+0

Я пробовал, но без помощи – Shruti

+0

PLS, см. Мое редактирование – Caner

+0

Это не объясняет, почему «видео» дублируется. – RivieraKid

Смежные вопросы