2

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();
    }

データベース コンテンツのスナップ ショット、

ここに画像の説明を入力

これは私のデータベースクラスです。

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;

}

私を助けてください。私の質問が明確であることを願っています。

前もって感謝します。

4

2 に答える 2

3

エラーがあります:

Index 1 requested, with a size of 1

カーソルのサイズは 1 であり、インデックス作成は 0 から始まることがわかっています。したがって、次のように記述します。

String ques = c.getString(1);

最初の要素ではなく、2 番目の要素を取得しようとします。最初の要素を取得したい場合は、次のように記述する必要があります。

String ques = c.getString(0);
于 2013-10-02T07:49:50.207 に答える
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(); より遅くなります。ただし、何千行もある場合を除き、大きな違いはありません

于 2013-10-02T09:46:01.407 に答える