我使用以下代码从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
}
}
异常屏幕截图
答案 0 :(得分:2)
检查extraItemEntityArray
和topDescription
数组的长度。
topDescription
长度小于extraItemEntityArray
的长度,因此投掷IndexOutOfBoundException
答案 1 :(得分:1)
异常的原因很明显:您正在尝试获取索引大于列表大小的元素。其次,当if
块中的代码至少执行一次时出现错误,在这种情况下k
变得大于resultTopping
大小,导致{ArrayOutOfBoundsException
1}}。
可能是重写if
语句并摆脱异常的最简单方法是:
if ((objectE.getString("Description")) != null && (objectE.getString("Type")).equals("E")) {
final String desc = objectE.getString("Description");
topDescription.add(desc);
resultTopping.add(desc);
}
答案 2 :(得分:1)
由于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);
因为它必然是相同的;)