ArrayIndexOutOfBoundsException:长度= 20;指数=20?

ArrayIndexOutOfBoundsException: length=20; index=20?

当我在我的列表视图中输入超过 20 "pieces" 时显示此错误,我该如何避免这种情况?

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

错误在这一行

img.setImageResource(imageId[position]);

仅当我post列表视图中的组件超过 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;
}

index 从 0 到 length-1。因此,在尝试访问元素 [length] 时会出现异常。

如果您不确定数组的大小,只需添加一个简单的检查,因此将跳过设置文本 and/or 图片。

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

发生这种情况是因为您的一个数组比另一个数组大,

所以我有一个建议给你,如果你有相同大小的它们,你应该尝试创建一个 POJO class 并让你的 ArrayAdapter 使用你的 POJO[] ,这将降低复杂性并提高可读性而且您的代码也很容易调试。

开心!

您正在为您的适配器提供 nome 作为比 imageId 更大的数据集。因为 getCount() 是基于 nome,所以你会得到 getView 调用 nome.lenght - 1 次。当position超过imageId.length - 1的值时,你会得到一个ArrayIndexOutBoundException