2017-10-06 143 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

你的数据库是空的。首先在数据库中放入一些问题 – Omer

+0

但是模拟器上的代码工作相同,问题也成功添加到数据库中。 –

回答

-1

创建列表后,您必须使用它的构造函数来实现它。因此,在使用您的列表之前添加以下行:

quesList = new ArrayList<>(); 
0

请检查gelAllQuestions()函数。首先如果函数没有返回空列表,你应该检查null。之后,您可以检查isEmpty()函数是否为空列表。

请确定数据库中有可用的数据。

相关问题