我试图在我的数据库中显示数据库示例中的随机数据,我总共有20个问题。我想在每次访问应用程序时随机显示10个qns。并且在我第二次访问它时,它将显示之前未显示的其他10个qns。
我代码: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它崩溃了
改变这一行:
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的,因此第二十和最后一个元素实际上位于索引19)。
请记住,SQLite的_id
不是基于0的