I am developing quiz application where user can solve quiz in particular time but when I am running application on emulator it runs without error but at the time of running application on real device it throws following error.
Error:-
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2683)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2744)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1493)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6195)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:874)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764)
Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:411)
at com.gaurav.javascripttutorial.subactivities.QuizMainActivity.onCreate(QuizMainActivity.java:52)
Code:-
public class QuizMainActivity extends AppCompatActivity {
private ProgressBar countDownTimer;
private TextView timer;
public int counter;
List<Question> quesList;
int score=0;
int qid=0;
Question currentQ;
TextView txtQuestion;
RadioButton rda, rdb, rdc;
Button butNext;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.quiz_main_activity);
/**
* Quiz coding
*/
DbHelper db=new DbHelper(this);
quesList=db.getAllQuestions();
currentQ=quesList.get(qid);
txtQuestion=(TextView)findViewById(R.id.textView1);
rda=(RadioButton)findViewById(R.id.radio0);
rdb=(RadioButton)findViewById(R.id.radio1);
rdc=(RadioButton)findViewById(R.id.radio2);
butNext=(Button)findViewById(R.id.nextButton);
setQuestionView();
butNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RadioGroup grp=(RadioGroup)findViewById(R.id.radioGroup1);
RadioButton answer=(RadioButton)findViewById(grp.getCheckedRadioButtonId());
Log.d("yourans", currentQ.getANSWER()+" "+answer.getText());
if(currentQ.getANSWER().equals(answer.getText()))
{
score++;
Log.d("score", "Your score"+score);
}
if(qid<22){
currentQ=quesList.get(qid);
setQuestionView();
}else{
Intent intent = new Intent(QuizMainActivity.this, QuizResultActivity.class);
Bundle b = new Bundle();
b.putInt("score", score); //Your score
intent.putExtras(b); //Put your score to your next Intent
startActivity(intent);
finish();
}
}
});
/**
* Timer Coding
*/
countDownTimer = (ProgressBar) findViewById(R.id.progressBar);
timer = (TextView) findViewById(R.id.timer);
new CountDownTimer(1200000,1000){
@Override
public void onTick(long millisUntilFinished) {
int progress = (int) (millisUntilFinished/120000)+1;
countDownTimer.setProgress(countDownTimer.getMax()-progress);
if (counter == 1080){
Toast.makeText(QuizMainActivity.this, "Only 2 minutes remaining, Please review the answers.", Toast.LENGTH_SHORT).show();
}
counter++;
Log.d("Counter number", ""+counter);
}
@Override
public void onFinish() {
Toast.makeText(QuizMainActivity.this, "Sorry! Time is over, Try again", Toast.LENGTH_LONG).show();
finish();
}
}.start();
}
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
private void setQuestionView()
{
txtQuestion.setText(currentQ.getQUESTION());
rda.setText(currentQ.getOPTA());
rdb.setText(currentQ.getOPTB());
rdc.setText(currentQ.getOPTC());
qid++;
}
}
When program runs and error throws the cursor denote to the following line of a code:-
currentQ=quesList.get(qid);
Please check the gelAllQuestions() function. First of all if the function not returning empty list, you should null check. After that, you can check is the list empty with isEmpty() function.
Please be sure there are available data in database.
After create a List, you must implement it with it's constructor. So add this line before use your List:
quesList = new ArrayList<>();
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.