2014-05-15 24 views
0

我创建一个测验应用程序,它做了两个问题,当应用程序需要经历5个问题后崩溃。我不知道为什么,我跟着一个教程的基本下跌。这里是QuizActivity的Android SQLite的测验崩溃时,应该以后5

public class QuizActivity extends Activity 
{ 
List<Question> quesList; 
int score=0; 
int qid=0; 
Question currentQ; 
TextView txtQuestion; 
RadioButton rda, rdb, rdc; 
Button butNext; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_quiz); 
    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.button1); 
    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()); 
      if(currentQ.getANSWER().equals(answer.getText())) 
      { 
       score++; 
      } 
       currentQ=quesList.get(qid); 
       setQuestionView(); 
       if(qid<5) 
       { 
        currentQ=quesList.get(qid); 
        setQuestionView(); 
       } 
       else 
       { 
        Intent intent = new Intent(QuizActivity.this, ResultActivity.class); 
        Bundle b = new Bundle(); 
        b.putInt("score", score); //Your score 
        intent.putExtras(b); //Put your score to your next Intent 
        startActivity(intent); 
        finish(); 
       } 
     } 

     }); 
} 
private void setQuestionView() 
{ 
    txtQuestion.setText(currentQ.getQUESTION()); 
    rda.setText(currentQ.getOPTA()); 
    rdb.setText(currentQ.getOPTB()); 
    rdc.setText(currentQ.getOPTC()); 
    qid++; 
} 

} 

它推动通过对ResultsActivity

public class ResultActivity extends Activity 
{ 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_result); 
    //get rating bar object 
    RatingBar bar=(RatingBar)findViewById(R.id.ratingBar1); 
    //get text view 
    TextView t=(TextView)findViewById(R.id.textResult); 
    //get score 
    Bundle b = getIntent().getExtras(); 
    int score= b.getInt("score"); 
    //display score 
    bar.setRating(score); 
    switch (score) 
    { 
    case 1: 
    case 2: t.setText("Oopsie! Better Luck Next Time!"); 
    break; 
    case 3: 
    case 4:t.setText("Hmmmm.. Someone's been reading a lot of trivia"); 
    break; 
    case 5:t.setText("Who are you? A trivia wizard???"); 
    break; 
    } 
} 
} 

和这里是logcat的错误

10月5日至15日:50:04.686:W/dalvikvm(12197 ):threadid = 1:线程退出时未捕获的异常(group = 0x41f758b0) 05-15 10:50:04.696:E/AndroidRuntime(12197):致命例外:main 05-15 10:50:04.696:E/AndroidRuntime (12197):java.lang。 IndexOutOfBoundsException:索引4无效,大小为4 05-15 10:50:04.696:E/AndroidRuntime(12197):在java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 05-15 10:50:04.696 :E/AndroidRuntime(12197):在java.util.ArrayList.get(ArrayList.java:308) 10月5日至15日:50:04.696:E/AndroidRuntime(12197):在1 com.example.timestableseasy.QuizActivity $。 onClick(QuizActivity.java:50) 05-15 10:50:04.696:E/AndroidRuntime(12197):at android.view.View.performClick(View.java:4421) 05-15 10:50:04.696: E/AndroidRuntime(12197):在android.view.View $ PerformClick.run(View.java:17903) 十月5日至15日:50:04.696:E/AndroidRuntime(12197):在android.os.Handler.handleCallback( Handler.java:730) 十月5日至15日:50:04.696:E/AndroidRuntime(12197):在android.os.Handler.dispatchMessage(Handler.java :92) 05-15 10:50:04.696:E/AndroidRuntime(12197):at android.os.Looper.loop(Looper.java:213) 05-15 10:50:04.696:E/AndroidRuntime(12197) ):at android.app.ActivityThread.main(ActivityThread.java:5225) 05-15 10:50:04.696:E/AndroidRuntime(12197):at java.lang.reflect.Method.invokeNative(Native Method) 05 -15 10:50:04.696:E/AndroidRuntime(12197):在java.lang.reflect.Method.invoke(Method.java:525) 十月5日至15日:50:04.696:E/AndroidRuntime(12197):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:741) 05-15 10:50:04.696:E/AndroidRuntime(12197):at com.android.internal.os.ZygoteInit.main( ZygoteInit.java:557) 05-15 10:50:04.696:E/AndroidRuntime(12197):at dalvik.system.NativeStart.main(Native Method)

回答

1

你对你的Button点击作为的qid增加每次2的结果调用setQuestionView();两次单击的Button而不是1

+0

的是,为什么它崩溃的是,单独的问题? –

+0

是的,这就是它崩溃的原因,你应该只调用一次函数,因为它会增加你的'qid'或者改变你增加'qid'的地方 – Apoorv

1

指数从0开始,所以有4个元素将指数从0到3.访问索引4 List超出范围:

currentQ=quesList.get(qid); 

你需要确保qid< 4,或更多一般来说,< quesList.size()

为什么你在两个问题后达到极限是因为你为每个问题增加了两次qid

+0

由于已停止崩溃的 –