2011-12-04 27 views
0

我試圖從我的數據庫中的數據庫示例顯示隨機數據,我總共有20個問題。我想每次訪問應用程序時隨機顯示10個qns。我第二次訪問它時,它會顯示其他10個以前沒有顯示過的qns。如何設置數據庫中的數據列表以隨機顯示在基於android的應用程序中?

我的代碼:

ArrayList<Integer> randList = new ArrayList<Integer>(); 
    Random randGenerator = new Random(); 

    ArrayList<String> list2 = new ArrayList<String>(db.selectData("MCQ",new String [] {"_id"}, "testId=0", null, null, null, null)); 

    //random 10 n.o 
    for(int i=0;i<10;i++) 
    { 
     int randNum = randGenerator.nextInt(list2.size()); 

     while (randList.contains(randNum)) 
     { 
      randNum = randGenerator.nextInt(list2.size()); 
     } 
     randList.add(randNum); 
     Log.d("rand no:"+i,String.valueOf(randNum)); 
    } 

    ArrayList<String> idList = new ArrayList<String>(); 
    //get the 10 _id that are chosen 
    for (int i=0; i<10;i++) 
    { 
     idList.add(list2.get(Integer.valueOf(randList.get(i)))); 
     Log.d("id:"+i,String.valueOf((list2.get(Integer.valueOf(randList.get(i)))))); 
    } 

    ArrayList<String> list3 = new ArrayList<String>(db.selectData("MCQ",new String [] {"Question"}, null, null, null, null, null)); 
    Log.d("size",String.valueOf(list3.size())); 
    ArrayList<String> qnsList = new ArrayList<String>(); 

    // == set question in arrangement of randList == // 
    for(int i=0;i<=list3.size();i++) 
    { 
     qnsList.add(list3.get(i)); 
     Log.d("_id:"+i,String.valueOf(list3.get(i))); 
    } 

我一次又一次測試了它,並意識到古怪,但它不能在_id = 20

該讀取的數據是什麼,我在我的日誌貓得到:

E/AndroidRuntime(1284): java.lang.IndexOutOfBoundsException: Invalid index 20, size is 20 
E/AndroidRuntime(1284):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257) 

有更多的,但我認爲它是沒用,因爲我試圖與剛剛_id = 19運行,它的工作原理,但一旦我更改爲20墜毀。

回答

0

改變這一行:

for(int i=0;i<=list3.size();i++) 

是:

for(int i=0;i<list3.size();i++) 

您可以通過循環遍歷了1太多次(在最後一次迭代中,當i = list3.size()你當你做list3.get(i)時會得到IndexOutOfBoundsException,因爲列表索引是基於0的,所以第20和最後一個元素實際上在索引19處)。

+0

我試過了..它得到了同樣的錯誤。 – Jovi

0

請記住,SQLite的_id不是基於0的。

相關問題