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
当我在我的列表视图中输入超过 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