[英]Android IndexOutOfBoundsException when running on real device
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.请检查 gelAllQuestions() 函数。 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.
之后,您可以使用 isEmpty() 函数检查列表是否为空。
Please be sure there are available data in database.请确保数据库中有可用数据。
After create a List, you must implement it with it's constructor.创建 List 后,您必须使用它的构造函数来实现它。 So add this line before use your List:
所以在使用你的列表之前添加这一行:
quesList = new ArrayList<>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.