这是我的在线考试代码,其中已经在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