光标索引超出绑定异常

时间:2014-07-16 05:47:04

标签: android

这是我的在线考试代码,其中已经在db和活动中提出问题,名为AttendExam.java。

AttendExam.java

    options = (RadioGroup) findViewById(R.id.radioGroup1);
    qno = (TextView) findViewById(R.id.textView1);
    question = (TextView) findViewById(R.id.textView2);
    submit = (Button) findViewById(R.id.button1);
    opt1 = (RadioButton) findViewById(R.id.radio0);
    opt2 = (RadioButton) findViewById(R.id.radio1);
    opt3 = (RadioButton) findViewById(R.id.radio2);
    opt4 = (RadioButton) findViewById(R.id.radio3);
    time = (Chronometer) findViewById(R.id.chronometer1);
    oedb = new OnlineExamDB(this);
    cursor = oedb.getRandom();
    cursor.moveToFirst();
    moveToNextQuestion();
    submit.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            opt1.setChecked(false);
            opt2.setChecked(false);
            opt3.setChecked(false);
            opt4.setChecked(false);
            sel = options.getCheckedRadioButtonId();
            select1 = (RadioButton) findViewById(sel);
            check = select1.getText().toString();
            if (check.equals(ans)) {

                sum = sum + 4;
                correct++;

            } else {
                if (sum == 0)
                    sum = 0;
                else
                    sum = sum - 1;
                wrong++;
            }

            if (count == 4)
                submit.setText("Submit");
            if (count == 5) {
                qno.setText("");
                question.setText("");
                opt1.setText("");
                opt2.setText("");
                opt3.setText("");
                opt4.setText("");
                submit.setText("");
                submit.setEnabled(false);
                percentage = (sum / 20) * 100;
                Intent pass = new Intent(AttendExam.this, MyMark.class);
                pass.putExtra("sum", "" + sum);
                pass.putExtra("correct", "" + correct);
                pass.putExtra("wrong", "" + wrong);
                pass.putExtra("percentage", "" + percentage);
                count = 0;
                correct = 0;
                wrong = 0;
                sum = 0;
                startActivity(pass);
            }

            else {
                cursor.moveToNext();
                moveToNextQuestion();

            }
        }
    });
}

public void moveToNextQuestion() {
    qno.setText("Question\t\t" + (count + 1));
    count++;
    question.setText(cursor.getString(
            cursor.getColumnIndexOrThrow("exam_question")).toString());
    opt1.setText(cursor.getString(cursor.getColumnIndexOrThrow("exam_option1"))
            .toString());
    opt2.setText(cursor.getString(cursor.getColumnIndexOrThrow("exam_option2"))
            .toString());
    opt3.setText(cursor.getString(cursor.getColumnIndexOrThrow("exam_option3"))
            .toString());
    opt4.setText(cursor.getString(cursor.getColumnIndexOrThrow("exam_option4"))
            .toString());
    ans = cursor.getString(cursor.getColumnIndexOrThrow("exam_answer"));
}

这是在DB

中声明的Random()
public Cursor getRandom() {
    // TODO Auto-generated method stub

    SQLiteDatabase db= dbh.getWritableDatabase();
    cursor=db.query("exam", null, null, null, null, null,"RANDOM()","5");
        return cursor;
}

它无法正常工作。并显示CursorIndexOutOfBoundException

异常消息显示如下

Log-cat:

07-16 01:44:49.790: E/AndroidRuntime(1290): FATAL EXCEPTION: main
07-16 01:44:49.790: E/AndroidRuntime(1290): Process: com.example.onlineexam, PID: 1290
07-16 01:44:49.790: E/AndroidRuntime(1290): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.onlineexam/com.example.onlineexam.AttendExam}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
07-16 01:44:49.790: E/AndroidRuntime(1290):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at android.os.Handler.dispatchMessage(Handler.java:102)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at android.os.Looper.loop(Looper.java:136)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at android.app.ActivityThread.main(ActivityThread.java:5017)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at java.lang.reflect.Method.invokeNative(Native Method)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at java.lang.reflect.Method.invoke(Method.java:515)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at dalvik.system.NativeStart.main(Native Method)
07-16 01:44:49.790: E/AndroidRuntime(1290): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
07-16 01:44:49.790: E/AndroidRuntime(1290):     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:426)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at com.example.onlineexam.AttendExam.moveToNextQuestion(AttendExam.java:104)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at com.example.onlineexam.AttendExam.onCreate(AttendExam.java:43)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at android.app.Activity.performCreate(Activity.java:5231)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
07-16 01:44:49.790: E/AndroidRuntime(1290):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
07-16 01:44:49.790: E/AndroidRuntime(1290):     ... 11 more

0 个答案:

没有答案