java.lang.ArrayIndexOutOfBoundsException:length = 1; forloop

时间:2016-04-02 16:40:02

标签: java android

我正在尝试在我的活动中为xml充气,但是我在for循环中得到这个Arrayoutofbondexception,因为它进入循环我不知道为什么它给我这个游标错误有人可以帮忙吗?

public class ProfleList extends AppCompatActivity {
    private TextView txtProfileName,txtProfileDate,txtProfileTime,txtProfileLocation;
    LinearLayout linearlist ;

    DatabaseHelper mydb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profle_list);

        mydb = new DatabaseHelper(this);

        long count = mydb.getCount();
        Log.d("count", "onCreate: "+count);

        if (count == 0){

        }else{
            ArrayList<ItemProfile> listprofile = mydb.profilelist();
            for (int i = 1; i < count; i++ ) {
                ItemProfile itemProfile = listprofile.get(i);

                linearlist = (LinearLayout)findViewById(R.id.layoutlist);
                View[] myView = new View[i];

                LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                myView[i] = inflater.inflate(R.layout.profile_list, null);

                txtProfileName = (TextView)myView[i].findViewById(R.id.txtName);
                txtProfileDate = (TextView)myView[i].findViewById(R.id.txtDate);
                txtProfileTime = (TextView)myView[i].findViewById(R.id.txtTime);
                txtProfileLocation = (TextView)myView[i].findViewById(R.id.txtLocation);

                txtProfileName.setText(itemProfile.getProfileName());
                txtProfileDate.setText(itemProfile.getDay()+itemProfile.getMonth()+itemProfile.getYear());
                txtProfileTime.setText(itemProfile.getHour()+itemProfile.getMinute());
                txtProfileLocation.setText(itemProfile.getCity());
                linearlist.addView(myView[i]);


            }



        }




    }

}

4 个答案:

答案 0 :(得分:3)

您的错误在这里:

throw

你已经用n个元素定义了一个视图数组,那么你就不能尝试在索引n处写....

尝试而不是0到n-1

实施例

因为你从1而不是零循环,所以使用i-1代替i

View[] myView = new View[i];
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
myView[i] = inflater.inflate(R.layout.profile_list, null);

答案 1 :(得分:0)

我认为你应该改变你的循环:

for (int i = 0; i < count; i++ ) {
...
}

答案 2 :(得分:0)

我认为你因为以下这些问题而得到了IOOBE:

View[] myView = new View[i];
...
myView[i] = inflater.inflate(R.layout.profile_list, null);

让我们说i == 1.所以你要创建一个大小为1的数组(new View [1])。 在那之后,你试图将一个对象放在位置1的数组中(myView [1] = ...) - 但是数组中没有索引1,因为数组的长度是1 - 所以你只有索引此时为0。

答案 3 :(得分:0)

您正在使用

ArrayList<ItemProfile> listprofile = mydb.profilelist();

获取返回类型为

的所有数据
ArrayList<ItemProfile>

存储来自

的所有数据
i=0 to i<=listprofile.size();

所以使用

for(i=0,i=listprofile.size(), i++) 
{
//your code
}