2017-10-06 15 views
-3

私は特定の時間にクイズを解決できるクイズのアプリケーションを開発していますが、エミュレータでアプリケーションを実行しているときにエラーなしで実行されます。AndroidのIndexOutOfBoundsException実際のデバイスで実行中

エラー: -

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); 
+7

エラーは、あなたのquesListが空リストであり、そこから0番目のインデックスを取得しようとしているというエラーです。 –

+0

データベースが空です。最初にデータベースにいくつかの質問を入れてください – Omer

+0

同じコードがエミュレータで動作し、質問もデータベースに正常に追加されます。 –

答えて

-1

リストを作成したら、それをそのコンストラクターで実装する必要があります。リストを使用する前にこの行を追加してください。

quesList = new ArrayList<>(); 
0

gelAllQuestions()関数を確認してください。まず、関数が空リストを返さない場合は、nullをチェックする必要があります。その後、isEmpty()関数を使ってリストが空であることを確認できます。

データベースに利用可能なデータがあることを確認してください。

関連する問題