Java 请求获取异常索引50,大小为50

Java 请求获取异常索引50,大小为50,java,android,database,sqlite,Java,Android,Database,Sqlite,从数据库中提取数据时出现异常。我试图从这行代码中获取列索引1的值String ques=c.getString(1) 这是我调用数据库类并尝试获取数据库的代码 try{ c=db.getText(Integer.toString(subid)); if(c==null) return; //if(c.getCount()> 0) //{ //int max=c.getCount(); //int min=0; Random r

从数据库中提取数据时出现异常。我试图从这行代码中获取
列索引1
的值
String ques=c.getString(1)

这是我调用数据库类并尝试获取数据库的代码

try{
   c=db.getText(Integer.toString(subid));
   if(c==null)
    return;

    //if(c.getCount()> 0)
    //{
    //int max=c.getCount();
    //int min=0;

    Random rn = new Random();       
    int randomNum =  rn.nextInt(max-1) + rowid;
    c.moveToPosition(randomNum);

    String ques=c.getString(1);
    tv.setText(ques+" ");

    cans=c.getString(2);
    shuffleArray(ans);
    int[] a = new int[4];
    int j=0;
        for (int i = 0; i < ans.length; i++)
        {
          a[j]=ans[i];
          j++;
        }
     ans1=c.getString(a[0]);
     ans2=c.getString(a[1]);
     ans3=c.getString(a[2]);
     ans4=c.getString(a[3]);
     rb1.setText(ans1);
     rb2.setText(ans2);
     rb3.setText(ans3);
     rb4.setText(ans4);
    }

   catch(Exception e)
{
    Toast.makeText(getApplicationContext(), e.getMessage()+"exception", Toast.LENGTH_LONG).show();
}
如我上面的详细信息和代码所示,当
subId的值为1时,它会毫无例外地从
subId 1的数据库中获取所有内容,但当我传递
subId=2的值时,它会给出
cursorindexoofbound:Index 50请求,大小为50
Exception 当我通过
subId=3
时,我会得到
请求的索引49,大小为49
随机数发生器有什么问题吗

其实我不知道这里有什么问题

我需要帮助


提前谢谢。

试着用这种方式生成你的随机数:(我假设c是一个光标)


希望这有帮助:)

好的,让我检查一下,顺便说一下,我想在变量rowid的值(作为最小值)和
c.getCount的值(作为最大值)之间生成随机数。好的,按照您的要求进行编辑。之前的问题是,当您添加rowid时,您的结果超出了最大sizeYeah谢谢您是对的,但是还有一个问题,我不想重复任何值。那么,该怎么办呢?在这种情况下,你需要重新考虑几件事。一个好主意是将所有问题加载到arraylist中,然后从arraylist中随机删除一个问题并显示它。另一个选项是在显示答案后删除数据库中的行,另一个选项是更改ID不在(…显示ID列表…)中的查询。这实际上取决于您的总体代码的工作方式。
public Cursor getText(String subId) throws SQLException //here it'll get all rows of subId=1 or whatever the value of subId
 {
  Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {
        KEY_id, KEY_ques, KEY_correctans, KEY_wrongans1,KEY_wrongans2, KEY_wrongans3}, 
        KEY_subjectid + "=" +  " '" + subId + "' " , null,null,null, null,null);
if (mCursor != null) 
{
    mCursor.moveToFirst();
}
return mCursor;

}
int randomNum =  rowid + (rn.nextInt() % (c.getCount() - rowid));
Use space in query " = " actually your column name become "KEY_subjectid=" which is wrong 




 KEY_subjectid + " =" +  " '" + subId + "' " , null,null,null, null,null);