![](/img/trans.png)
[英]IndexOutOfBoundsException error on Android device not on emulator
[英]Android IndexOutOfBoundsException when running on real device
我正在開發測驗應用程序,用戶可以在特定時間解決測驗,但是當我在模擬器上運行應用程序時,它運行沒有錯誤,但在真實設備上運行應用程序時,它會引發以下錯誤。
錯誤:-
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)
代碼:-
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++;
}
}
當程序運行並拋出錯誤時,光標表示以下代碼行:-
currentQ=quesList.get(qid);
請檢查 gelAllQuestions() 函數。 首先,如果函數沒有返回空列表,你應該空檢查。 之后,您可以使用 isEmpty() 函數檢查列表是否為空。
請確保數據庫中有可用數據。
創建 List 后,您必須使用它的構造函數來實現它。 所以在使用你的列表之前添加這一行:
quesList = new ArrayList<>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.