【问题标题】:Issue with String<List> IndexOutOfBoundsException in AndroidAndroid 中的 String<List> IndexOutOfBoundsException 问题
【发布时间】:2015-04-10 13:28:28
【问题描述】:

我使用下面的代码从列表中提取数据,当我尝试使用下面的代码时,我得到了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
                        }
                    }

异常截图

【问题讨论】:

  • 发布您的完整代码
  • 感谢你们所有人。我希望我选择了最合适的答案。

标签: android indexoutofboundsexception


【解决方案1】:

检查extraItemEntityArraytopDescription 数组的长度。

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

【讨论】:

  • 首先,这些不是数组,而是List 实现,可能是ArrayLists。其次,当if块内的代码至少有一次没有被执行时会出现错误,在这种情况下k变得大于resultTopping的大小,导致ArrayOutOfBoundsException
  • @aga 问题不在于 resultTopping 数组列表,而在于 topDescription.get(k) 数组列表
  • @Fahim 我明白你的意思,我理解这个问题,但你介意在代码级别帮助我吗
  • @modabeckham 将需要您的整个代码......以及您想要实现的正确细节
  • @Fahim 是的,你说得对,我指的是topDescription
【解决方案2】:

异常的原因很清楚:您试图获取索引大于列表大小的元素。其次,当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);
}

【讨论】:

  • 如何使用这个条件,因为即使这很重要 (objectE.getString("Type")) .equals("E")
  • @modabeckham 删除 if 语句中的所有内容并将我显示的代码放在这里。
  • 我删除了,但我在 if 中有 2 个条件,所以除了 final String desc = objectE.getString("Description");,我想使用 (objectE.getString("Type")) 。也等于(“E”)条件
  • @modabeckham 我已经更新了答案,以向您展示您的代码的外观。
【解决方案3】:

因为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);

因为它必然是同一件事;)

【讨论】:

  • 如何使用这个条件,因为即使这很重要 (objectE.getString("Type")) .equals("E")
  • 我没有得到更新 :( 因为 desc 是字符串,不允许我使用 (objectE.getString("Type")) .equals("E") ,因为我之前使用过,可以请告诉我在那儿做什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 2018-01-08
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
相关资源
最近更新 更多