Когда я пытаюсь загрузить другое действие, я продолжаю получать ArrayIndexOutOfBoundsException. Поэтому, когда я добираюсь до своего кода, он просто терпит неудачу. Вот оскорбительный код:Проблемы с моделью данных Android
package com.example.lasic;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class QuestionActivity extends Activity{
private int counter = 0;
private UserScanner scanner;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.firstq);
scanner = new UserScanner();
loadNext();
}
public void loadNext() {
Button button1 = (Button) findViewById(R.id.button1);
button1.setText(scanner.left.get(counter));
TextView view1 = (TextView) findViewById(R.id.textView1);
view1.setText(scanner.questionList.get(counter));
Button button2 = (Button) findViewById(R.id.button2);
button2.setText(scanner.centerLeft.get(counter));
Button button3 = (Button) findViewById(R.id.button3);
button3.setText(scanner.center.get(counter));
Button button4 = (Button) findViewById(R.id.button4);
button4.setText(scanner.centerRight.get(counter));
Button button5 = (Button) findViewById(R.id.button5);
button5.setText(scanner.right.get(counter));
counter = counter + 1;
}
}
Я тестировал класс UserScanner, и он работает так, как я предполагал. Он содержит данные в пяти ArrayLists (левый, центральный, centerLeft, right, centerRight), который, как я знаю, заполняется правильно, как я хочу, чтобы они были. Тем не менее, когда я бегу Android программы я получаю следующее сообщение об ошибке LogCat
02-17 14:28:20.307: E/AndroidRuntime(1245): Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
02-17 14:28:20.307: E/AndroidRuntime(1245): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
02-17 14:28:20.307: E/AndroidRuntime(1245): at java.util.ArrayList.get(ArrayList.java:308)
02-17 14:28:20.307: E/AndroidRuntime(1245): at com.example.lasic.QuestionActivity.loadNext(QuestionActivity.java:21)
02-17 14:28:20.307: E/AndroidRuntime(1245): at com.example.lasic.QuestionActivity.onCreate(QuestionActivity.java:17)
02-17 14:28:20.307: E/AndroidRuntime(1245): at android.app.Activity.performCreate(Activity.java:5133)
02-17 14:28:20.307: E/AndroidRuntime(1245): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-17 14:28:20.307: E/AndroidRuntime(1245): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
02-17 14:28:20.307: E/AndroidRuntime(1245): ... 11 more
package com.example.lasic;
import java.util.ArrayList;
import java.util.Scanner;
import android.os.Parcelable;
public class UserScanner {
private ArrayList<String> strings;
private ArrayList<String> questionList;
private ArrayList<String> left;
private ArrayList<String> centerLeft;
private ArrayList<String> center;
private ArrayList<String> right;
private ArrayList<String> centerRight;
public UserScanner(){
this.strings = InsertionSort.laser();
this.questionList = new ArrayList<String>(20);
this.left = new ArrayList<String>(20);
this.centerLeft = new ArrayList<String>(20);
this.center = new ArrayList<String>(20);
this.centerRight = new ArrayList<String>(20);
this.right = new ArrayList<String>(20);
for(String x: strings) {
if (x.contains("M:")) {
center.add(x);
}
else if (x.contains("CL:")) {
centerLeft.add(x);
}
else if (x.contains("CR:")) {
centerRight.add(x);
}
else if (x.contains("L:")) {
left.add(x);
}
else if (x.contains("R:")) {
right.add(x);
}
else if (x.contains("?")) {
questionList.add(x);
}
}
}
public ArrayList<String> getLeft(){
return left;
}
public ArrayList<String> getList() {
return questionList;
}
}
Таким образом, хотя сканер инициализируется с соответствующими данными, то ArrayLists здесь пусто и размер 0. Так как же я могу решить эту проблему?
Это всегда «просто», как кажется. На самом деле они неправильно заполнены. Вы заполняете их в конструкторе? – keyser
Да, я сделал это. Я протестировал UserScanner, и все работает отлично. –
Тогда ваш тест некорректен. После запуска конструктора в коде выше, 'left' пуст. – keyser