安卓数据模型的问题



当我尝试加载另一个活动时,我不断得到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(左、中、中左、右、中右)中的数据,我知道它们按照我想要的方式正确填充。然而,当我运行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; 
    }
    }

因此,当扫描程序使用适当的数据初始化时,此处的数组列表为空且大小为 0。那么我该如何解决这个问题呢?

ArrayList 的构造函数不添加空元素,它只是设置其初始(内部)容量,这意味着它将需要一定数量的元素(避免调整大小)。

因此,new ArrayList<String>(20)为您提供了一个容量为 20 的空 ArrayList。

这与strings不包含所有标识符CLCRLR的情况相结合,将导致空的 ArrayLists。

最新更新