当我尝试加载另一个活动时,我不断收到ArrayIndexOutOfBoundsException。所以当我到达我的代码时,它就失败了。这是违规代码:
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(left,center,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.那么如何解决此问题?
答案 0 :(得分:0)
ArrayList的构造函数不添加空元素,它只是设置其初始(内部)容量,这意味着它会期望一定数量的元素(避免调整大小)。
因此,new ArrayList<String>(20)
为您提供容量为20的空ArrayList。
这与strings
不包含所有标识符CL
,CR
,L
,R
的情况相结合在空的ArrayLists中。