获取请求的异常索引1,大小为1

时间:2013-10-02 07:36:52

标签: java android database sqlite

我在Android项目中从数据库中获取数据时遇到异常。我想从这行代码column index 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();
    }

快照我的数据库内容,

enter image description here

这是我的数据库类

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;

}

请帮助我,希望我的问题很明确。

先谢谢。

2 个答案:

答案 0 :(得分:3)

您有错误:

Index 1 requested, with a size of 1

它说,光标的大小是1,你知道索引从0开始。因此,如果你写:

String ques = c.getString(1);

你试图获得SECOND元素,而不是第一个元素。如果你想获得第一个元素,你必须写:

String ques = c.getString(0);

答案 1 :(得分:0)

删除c.MovetoPosition(randomno);

而是试试这个:

c.moveToFirst();
int rw_cnt=c.getCount();
int rndm = ((Math.random())*10000)%rw_cnt); //generates a random no btwn 1 and rw_cnt
for(int i=0;i<rndm;i++)  //move cursor rand times
c.moveToNext();

这肯定会慢于c.moveToPostion();但除非你有数千行

,否则它不会产生太大影响