Android 中的 String<List> IndexOutOfBoundsException 问题

Issue with String<List> IndexOutOfBoundsException in Android

我使用下面的代码从 List 中提取数据,当我尝试使用下面的代码时,我得到了 IndexOutOfBoundsException

这是什么原因,谁能帮我解决这个问题

            for (int k = 0; k < extraItemEntityArray.length(); k++) {
                        JSONObject objectE = extraItemEntityArray
                                .getJSONObject(k);

                        if ((objectE.getString("Description")) != null
                                && (objectE.getString("Type"))
                                        .equals("E")) {

                            topDescription.add(objectE
                                    .getString("Description"));

                            resultTopping.add(topDescription.get(k)); //exception occurs here
                        }
                    }

异常屏幕截图

检查 extraItemEntityArraytopDescription 数组的长度。

topDescription 长度小于 extraItemEntityArray 的长度,因此抛出 IndexOutOfBoundException

异常原因很明确:您试图获取索引大于列表大小的元素。其次,当 if 块中的代码至少有一次未被执行时会出现错误,在这种情况下 k 变得大于 resultTopping 大小,导致 ArrayOutOfBoundsException.
重写 if 语句并消除异常的最简单方法可能是:

if ((objectE.getString("Description")) != null && (objectE.getString("Type")).equals("E")) {
    final String desc = objectE.getString("Description");
    topDescription.add(desc);
    resultTopping.add(desc);
}

由于 if 语句,代码至少有一次没有执行行:

topDescription.add(objectE.getString("Description")); 

然后,通常情况下,当您尝试获取一个值时,它可能会超出范围。

如果您想始终获取最新值,请替换这些行:

topDescription.add(objectE.getString("Description"));

resultTopping.add(topDescription.get(k)); 

与以下

String desc = objectE.getString("Description");
topDescription.add(desc);
resultTopping.add(desc);

因为必然是同一件事 ;)