繁体   English   中英

数组索引超出范围异常:Android

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM