当满足特定条件时,我试图从两个 arrayList 中删除内容。但是当条件满足时,我得到并发修改错误。在互联网上搜索后,我看到了使用迭代器概念解决此问题的解决方案,但这也不起作用。
这是我尝试过的两个代码变体:[我的代码在 Kotlin 中]
第一种变化:删除后立即出错
var index = 0
for (snap: DataSnapshot in snaps){
if (snap.key == snapshot.key){
snaps.removeAt(index)
emailOfSenders.removeAt(index)
}
index++
}
Run Code Online (Sandbox Code Playgroud)
第二种变化:如果数组列表中的项目小于 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++
}
Run Code Online (Sandbox Code Playgroud)
错误日志:
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 …Run Code Online (Sandbox Code Playgroud) 我有json数据文件,groups.json
{
"groups" : [
{ "pname" : "group1",
"remarks" : "best" },
{ "pname" : "group2",
"remarks" : "not the best" } ,
{ "pname" : "group3",
"remarks" : "affordable" } ]
}
Run Code Online (Sandbox Code Playgroud)
还有pushtest.html
<body>
<script type="text/javascript">
var groups;
var len;
$.getJSON('groups.json',function(data) {
console.log(data.groups);
groups = data.groups;
len = groups.length;
});
function save()
{
var user={};
user.pname=document.getElementById("name").value;
user.remarks=document.getElementById("remark").value;
console.log(user);
var l = JSON.stringify(groups);
var obj = JSON.parse(l);
obj['groups'].push(user);
var v=JSON.stringify(obj);
console.log(v);
}
</script>
<form>
<input name="name" type="text" id="name" placeholder="name" …Run Code Online (Sandbox Code Playgroud)