gpt4 book ai didi

android - 为什么在尝试获取 jsonArray 的项目时出现 java.lang.IndexOutOfBoundsException?

转载 作者:行者123 更新时间:2023-11-29 14:34:35 25 4
gpt4 key购买 nike

在我的应用程序中,我可以将文件附加到消息中。这些附加文件显示在带有适配器的 RecyclerView 中。 RV 的每个项目都有自己的 btn 用于删除它。问题是当我的列表中有两个项目并尝试删除 1 个项目而不是第 2 个时,我收到错误消息。但是当我尝试删除第二项然后删除第一项时一切正常。我使用调试器并设法找到有问题的行,但我不知道如何解决这个问题。因此,这里是适配器中用于从列表中删除项目的代码:

val array = Singleton.array
if (array!!.size() > 0) {
for (i in 0 until array.size()) {
val obj = array.get(i).asJsonObject

if (obj.get("filename").toString().substring(1, obj.get("filename").toString().length - 1) == mNames[position]) {
array.remove(obj)
mNames.removeAt(position)
Singleton.array = array
updateNames(mNames)
}

}
}

我在这一行有问题:

val obj = array.get(i).asJsonObject

我通过记录器检查了这个变量,一切似乎都正常,我可以用 0 索引获取值。然后我认为问题出在我将数据发送到适配器的地方,但一切正常。我使用调试器并看到该方法 getAsJsonObject() 抛出此异常:

enter image description here

为什么会发生这种情况以及如何解决此错误。我试图改变这个:for (i in 0 until array.size()) 到此 for (i in 0 until array.size()-1) 并且它不起作用。然后我尝试将此循环更改为此 for (i in 1 until array.size()) 并且它也没有帮助。那么,我在哪里犯了错误以及将来如何防止这个问题?

附言抱歉附上调试器的屏幕截图,因为我无法从中获取文本数据。

最佳答案

你从源数组中删除了元素,这就是你得到异常的原因所以使用新数组作为你的过滤值

下面一行的问题

array.remove(obj)

解决方案:

val positionsForRemove = ArrayList<Int>(),
val array = Singleton.array
if (array!!.size() > 0) {
for (i in 0 until array.size()) {
val obj = array.get(i).asJsonObject
if (obj.get("filename").toString().substring(1, obj.get("filename").toString().length - 1) == mNames[position])
positionsForRemove.add(position)
}
for(position in positionsForRemove){
array.remove(position)
mNames.remove(position)
}
Singleton.array = array
updateNames(mNames)


}

关于android - 为什么在尝试获取 jsonArray 的项目时出现 java.lang.IndexOutOfBoundsException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56371957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com