我正在尝试在满足特定条件时从两个ArrayList中删除内容。但是当条件满足时,我会收到并发修改错误。在互联网上搜索后,我看到了使用迭代器概念来解决此问题的解决方案,但这也不起作用。
以下是我尝试的两种代码变化:[我的代码是Kotlin]
第一种变化:删除后立即出现错误
以下是我尝试的两种代码变化:[我的代码是Kotlin]
第一种变化:删除后立即出现错误
var index = 0
for (snap: DataSnapshot in snaps){
if (snap.key == snapshot.key){
snaps.removeAt(index)
emailOfSenders.removeAt(index)
}
index++
}
第二种变化:如果ArrayList中的项少于3个,则有效,但如果项为3个或多于3个,则我会收到相同的错误。
var index = 0
val iter: Iterator<DataSnapshot> = snaps.iterator()
while (iter.hasNext()) {
val snap: DataSnapshot = iter.next()
if (snap.key == snapshot.key){
snaps.removeAt(index)
emailOfSenders.removeAt(index)
}
index++
}
错误日志:
2020-11-18 13:52:32.829 18935-18935/com.rofy.snapyandroid E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.rofy.snapyandroid, PID: 18935
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.next(ArrayList.java:860)
at com.rofy.snapyandroid.SnapsActivity$onCreate$1.onChildRemoved(SnapsActivity.kt:54)
at com.google.firebase.database.core.ChildEventRegistration.fireEvent(ChildEventRegistration.java:88)
at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
更多信息:我正在创建一个类似 Snapchat 的应用程序,并使用谷歌的 Firebase 进行开发。一切工作都很完美,包括在 Firebase 中上传、下载和删除,因此我认为这不是 Firebase 的问题。