2013-11-03 57 views
0

我做了一個多選的測驗遊戲。我從數據庫中得到問題和多選答案。從數據庫中檢索並檢查正確答案。我使用的數據庫是sqlite數據庫。 我的異常代碼:請幫助:java.lang.IndexOutOfBoundsException:索引0無效,大小爲0

11-03 17:43:11.108: E/AndroidRuntime(640): FATAL EXCEPTION: main 
11-03 17:43:11.108: E/AndroidRuntime(640): java.lang.RuntimeException: Unable to start activity ComponentInfo{priscillia.benkyo/priscillia.benkyo.TestLevel1}: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
11-03 17:43:11.108: E/AndroidRuntime(640): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
11-03 17:43:11.108: E/AndroidRuntime(640): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
11-03 17:43:11.108: E/AndroidRuntime(640): at android.app.ActivityThread.access$600(ActivityThread.java:130) 
11-03 17:43:11.108: E/AndroidRuntime(640): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
11-03 17:43:11.108: E/AndroidRuntime(640): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-03 17:43:11.108: E/AndroidRuntime(640): at android.os.Looper.loop(Looper.java:137) 
11-03 17:43:11.108: E/AndroidRuntime(640): at android.app.ActivityThread.main(ActivityThread.java:4745) 
11-03 17:43:11.108: E/AndroidRuntime(640): at java.lang.reflect.Method.invokeNative(Native Method) 
11-03 17:43:11.108: E/AndroidRuntime(640): at java.lang.reflect.Method.invoke(Method.java:511) 
11-03 17:43:11.108: E/AndroidRuntime(640): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
11-03 17:43:11.108: E/AndroidRuntime(640): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
11-03 17:43:11.108: E/AndroidRuntime(640): at dalvik.system.NativeStart.main(Native Method) 
11-03 17:43:11.108: E/AndroidRuntime(640): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 
11-03 17:43:11.108: E/AndroidRuntime(640): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
11-03 17:43:11.108: E/AndroidRuntime(640): at java.util.ArrayList.get(ArrayList.java:304) 
11-03 17:43:11.108: E/AndroidRuntime(640): at priscillia.benkyo.TestLevel1.onCreate(TestLevel1.java:46) 
11-03 17:43:11.108: E/AndroidRuntime(640): at android.app.Activity.performCreate(Activity.java:5008) 
11-03 17:43:11.108: E/AndroidRuntime(640): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
11-03 17:43:11.108: E/AndroidRuntime(640): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 

TestLevel1.java

public class TestLevel1 extends Activity { 
    List<Question> quesList; 
    int score=0; 
    int qid; 
    Question currentQ; 
    TextView txtQuestion; 
    RadioButton rda, rdb, rdc, rdd; 
    Button butNext; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test_level1); 
     DatabaseHelper db=new DatabaseHelper(this); 
     quesList=db.getAllQuestions(); 
     currentQ=quesList.get(qid); 
     txtQuestion=(TextView)findViewById(R.id.soal); 
     rda=(RadioButton)findViewById(R.id.radio0); 
     rdb=(RadioButton)findViewById(R.id.radio1); 
     rdc=(RadioButton)findViewById(R.id.radio2); 
     rdd=(RadioButton)findViewById(R.id.radio3); 
     butNext=(Button)findViewById(R.id.lanjutBtn); 
     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.GetCorr_Ans()+" "+answer.getText()); 
        if(currentQ.GetCorr_Ans().equals(answer.getText())) 
        { 
         score++; 
         Log.d("score", "Your score"+score); 
        } 
        if(qid<5){      
         currentQ=quesList.get(qid); 
         setQuestionView(); 
        }else{ 
         Intent intent = new Intent(TestLevel1.this, Result.class); 
         Bundle b = new Bundle(); 
         b.putInt("score", score); //Your score 
         intent.putExtras(b); //Put your score to your next Intent 
         startActivity(intent); 
         finish(); 
        } 
       } 
      }); 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.test_level1, menu); 
     return true; 
    } 
    private void setQuestionView() 
    { 
     txtQuestion.setText(currentQ.GetSoal_Desc()); 
     rda.setText(currentQ.GetPilihan_A()); 
     rdb.setText(currentQ.GetPilihan_B()); 
     rdc.setText(currentQ.GetPilihan_C()); 
     rdd.setText(currentQ.GetPilihan_D()); 
     qid++; 
    } 
} 

請幫我解決這個....

回答

5

我猜有一個從數據庫返回什麼:

quesList=db.getAllQuestions(); 

因此,獲得第一項(索引0)的下一行失敗:

currentQ=quesList.get(qid); 

您應該測試是否有列表中的任何項目獲得第一個元素之前:

if (quesList.size() > 0) { 
    // you can now get items 
} 
+0

什麼內容,如果(quesList.size> 0)? – user2923484

+0

你的內容是什麼意思?這是測試列表中的項目數量以檢查是否至少有一項。 – Szymon

相關問題