2017-03-18 1 views
-1

je fais une application quiz et est resté coincé sur l'erreur suivante mon logcat est donné aprèscomment traiter ava.lang.IndexOutOfBoundsException: index non valide 4, la taille est de 4

E/AndroidRuntime: FATAL EXCEPTION: main 
                    Process: com.example.owner.quiz, PID: 25307 
                    java.lang.IndexOutOfBoundsException: Invalid index 4, size is 4 
                     at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) 
                     at java.util.ArrayList.get(ArrayList.java:308) 
                     at com.example.owner.quiz.MainActivity$1.onClick(MainActivity.java:50) 
                     at android.view.View.performClick(View.java:4791) 
                     at android.view.View$PerformClick.run(View.java:19884) 
                     at android.os.Handler.handleCallback(Handler.java:739) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:135) 
                     at android.app.ActivityThread.main(ActivityThread.java:5268) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at java.lang.reflect.Method.invoke(Method.java:372) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697) 

quand je clique sur l'(MainActivity.java:50) il ira à l'activité principale et montrant ce currentQ=quesList.get(qid); suivant est mon principal code d'activité ici

public class MainActivity 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_main); 
    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(); 
     } 
    }); 
} 

quelqu'un peut me dire comment faire face à cette

+1

Votre erreur l'indique tout. La taille est de 4 donc 'quesList.get (4)' lancera une exception. –

+1

Copie possible de [Quelles sont les causes d'une exception java.lang.ArrayIndexOutOfBoundsException et comment l'empêcher?] (Http://stackoverflow.com/questions/5554734/what-causes-a-java-lang-arrayindexoutofboundsexception-and-how- do-i-prevent-it) –

Répondre

-1

vous essayez de vérifier à l'aide si, voir exemple

if (qid < quesList.size()) { 
    currentQ=quesList.get(qid); 
} 
1

Vous changez la valeur de qid-4 quelque part que ce n'est pas dans votre code inclus, mais votre quesList est seulement 4 articles longs, de sorte que les indices valides pour ce sont 0-3.

-1

Cela peut être dû au fait qu'un index sqlite commence à 1 (et non à 0 like List), pouvez-vous afficher votre code de classe DbHelper? spécifiquement la méthode getAllQuestions().

+0

public Liste getAllQuestions() { Liste quesList = new ArrayList (); String selectQuery = "SELECT * FROM" + TABLE_QUEST; dbase = this.getReadableDatabase(); Curseur cursor = dbase.rawQuery (selectQuery, null); –

+0

if (cursor.moveToFirst()) { do { Question quest = nouvelle Question(); quest.setID (cursor.getInt (0)); quest.setQUESTION (cursor.getString (1)); quest.setANSWER (cursor.getString (2)); quest.setOPTA (cursor.getString (3)); quest.setOPTB (cursor.getString (4)); quest.setOPTC (cursor.getString (5)); quesList.add (quête); } while (cursor.moveToNext()); } –

+0

OK, cela semble correct, vous obtenez une liste de "Question" avec une certaine taille de cette méthode. faites attention à ce que vous définissiez l'ID de la question comme position 0 dans le curseur. Je suppose que c'est votre ID d'incrément automatique, corect moi si je me trompe, cet incrément automatique commence par la valeur de 1. maintenant j'ai besoin de voir si vous utilisez cet ID pour obtenir l'index de question de la liste de quest. montre moi le code où tu changes la valeur du "qid" vérifiable dans l'activité principale. – nir