Android数据模型存在问题

时间:2014-02-17 14:32:35

标签: android

当我尝试加载另一个活动时,我不断收到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.那么如何解决此问题?

1 个答案:

答案 0 :(得分:0)

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

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

这与strings不包含所有标识符CLCRLR的情况相结合在空的ArrayLists中。