0
當我嘗試加載另一個活動時,我不斷收到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類,它的工作原理與我打算的一樣。它包含五個數組列表中的數據(左,中,中左,右,中心右),我知道它們正確填充,因爲我希望它們是。然而,當我運行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;
}
}
所以當掃描儀和相應的數據進行初始化,這裏的ArrayList是空的大小爲0。所以,如何解決這個問題?
它看起來總是「簡單」。他們實際上沒有正確填充。你在構造函數中填充它們嗎? – keyser
是的,我做到了。我已經測試了UserScanner,它工作得很好。 –
然後你的測試有點瑕疵。在上面的代碼中運行構造函數後,'left'是空的。 – keyser