[英]Array Index out of bounds exception:Android
在迭代兩個列表並在布局中顯示項目時,在下面的行中獲取數組索引超出范圍異常。我們如何才能進行null檢查或出現錯誤的條件
ParallelList<BaseItem> list = new ParallelList<BaseItem>(highlighted, normal);
for (List<BaseItem> ints : list) {
final BaseItem itemH = ints.get(0);
if(!ints.get(1).equals(null) && ints.size()!=0){ // error here at this line
final BaseItem itemn = ints.get(1);
}
為此使用下面的並行列表
public class ParallelList<T> implements Iterable<List<T>> {
private final List<List<T>> lists;
public ParallelList(List<T>... lists) {
this.lists = new ArrayList<List<T>>(lists.length);
this.lists.addAll(Arrays.asList(lists));
}
public Iterator<List<T>> iterator() {
return new Iterator<List<T>>() {
private int loc = 0;
public boolean hasNext() {
boolean hasNext = false;
for (List<T> list : lists) {
hasNext |= (loc < list.size());
}
return hasNext;
}
public List<T> next() {
List<T> vals = new ArrayList<T>(lists.size());
for (int i=0; i<lists.size(); i++) {
if(loc < lists.get(i).size()){
vals.add(lists.get(i).get(loc));
}
// vals.add(loc < lists.get(i).size() ? lists.get(i).get(loc): null);
}
loc++;
return vals;
}
public void remove() {
for (List<T> list : lists) {
if (loc < list.size()) {
list.remove(loc);
}
}
}
};
}
}
錯誤在這里
java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
您應該逆轉條件。 首先確保列表的大小足夠大(即,它具有多個元素),然后才嘗試訪問列表的第二個元素:
if(ints.size() > 1 && ints.get(1) != null)
扭轉局面:
if(ints.size()!=0 && !ints.get(1).equals(null))
&&連接從左到右評估。 因此,當大小為0時,左部分已經為假。 完整的&&表達式不能真實地接受!ints.get(1).equals(null)的計算結果。 因此,它將根本不會執行。
順便說一句,第一個元素的索引為0。您確實要使用:
if(ints.size()!=0 && !ints.get(0).equals(null))
要么
if(ints.size()<=2 && !ints.get(1).equals(null))
PS:仔細查看錯誤消息,結果發現錯誤消息確實可以解決您的問題。 大小實際上是1,但是您正在訪問索引為1的第二項。(同樣,第一個索引為0)
你應該嘗試這些條件
if(!ints.isEmpty()){
final BaseItem itemH = ints.get(0);
if( ints.size()>=1 && !ints.get(1).equals(null) ){
final BaseItem itemn = ints.get(1);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.