ArrayIndexOutOfBoundsException:length = 20;指数= 20?

时间:2015-01-16 14:04:20

标签: android arrays listview arraylist

当我在我的列表视图中输入超过20"件"时,它显示了这个错误,我该怎么做才能避免这种情况?

> java.lang.ArrayIndexOutOfBoundsException: length=20; index=20
>  at com.Amarildo.asd.List_View_Esercizi.getView(List_View_Esercizi.java:33)

错误在此行

img.setImageResource(imageId[position]);
只有当我在列表视图中发布超过20个组件

时才会出现

这是我的适配器

public class List_View_Esercizi extends ArrayAdapter<String> {

private Activity context;
private String[] nome;
private Integer[] imageId;

public List_View_Esercizi(Activity context, String[] nome, Integer[] imageId) {
    super(context, R.layout.list_view_esercizi, nome);
    this.context = context;
    this.nome = nome;
    this.imageId = imageId;
}

public View getView(int position, View view, ViewGroup parent){
    LayoutInflater inflater = context.getLayoutInflater();
    View rowView = inflater.inflate(R.layout.list_view_esercizi, null, true);
    TextView txt = (TextView) rowView.findViewById(R.id.textView);
    ImageView img = (ImageView) rowView.findViewById(R.id.imageView2);
    txt.setText(nome[position]);
    img.setImageResource(imageId[position]);
    return rowView;
}

4 个答案:

答案 0 :(得分:2)

您为适配器提供的nome数据集大于imageId。由于getCount()基于nome,因此getView将被称为nome.lenght - 1次。当排名超过imageId.length - 1的值时,您将获得ArrayIndexOutBoundException

答案 1 :(得分:0)

索引从0变为长度-1。因此,在尝试访问元素[length]时会出现异常。

答案 2 :(得分:0)

如果您不确定数组的大小,只需添加一个简单的检查,这样就可以跳过设置文本和/或图像。

if (nome.lenght > position) {
    txt.setText(nome[position]);
}
if (imageId.lenght > position) {
    img.setImageResource(imageId[position]);
}

答案 3 :(得分:0)

这是因为您的某个阵列的大小比另一个大,

所以我有一个建议,如果你有两个相同的大小,你应该尝试创建一个POJO类,让你的ArrayAdapter使用你的POJO [],这将降低复杂性和增强可读性,你的代码将很容易也调试。

恩乔伊!