Android 如何修复Kotlin中的并发修改异常
这是我的代码,我在其中向列表添加数据:Android 如何修复Kotlin中的并发修改异常,android,kotlin,Android,Kotlin,这是我的代码,我在其中向列表添加数据: fun bindProcess(listOfDocId: MutableList<String>, isActvityLogEnabled: Boolean): Observable<MutableList<SearchResultModel>> { return Observable.create<MutableList<SearchResultModel>> { va
fun bindProcess(listOfDocId: MutableList<String>, isActvityLogEnabled: Boolean): Observable<MutableList<SearchResultModel>> {
return Observable.create<MutableList<SearchResultModel>> {
var filteredList =CopyOnWriteArrayList<SearchResultModel>()// mutableListOf<SearchResultModel>()
val headerItem: SearchResultModel = SearchResultModel()
headerItem.type = 0
headerItem.title = context.getString(R.string.top_matches_label)
filteredList.add(headerItem)
for (row in ContSyncApplication.getContacts()) {
if (listOfDocId.contains(row.docId)) {
val myData: SearchResultModel = SearchResultModel()
myData.type = 1
myData.docId = row.docId
myData.name = row.display_name
if (!row.profile_image.isNullOrBlank()) {
myData.imagePath = row.profile_image!!
}
filteredList.add(myData)
if (isActvityLogEnabled && DatabaseQueryHelper.checkActivityLogById(row.docId)) {
val myactivityData: SearchResultModel = SearchResultModel()
myactivityData.type = 1
myactivityData.docId = row.docId
myactivityData.name = row.display_name
myactivityData.imagePath = row.profile_image ?: ""
mActvityList.add(myactivityData)
}
}
}
if (mActvityList.size > 0) {
val activityHeader: SearchResultModel = SearchResultModel()
activityHeader.type = 0
activityHeader.title = "Activity Log"
filteredList.add(activityHeader)
filteredList.addAll(mActvityList)
}
it.onNext(filteredList)
it.onComplete()
}
}
fun bindProcess(listOfDocId:MutableList,isActvityLogEnabled:Boolean):可观察{
返回可观察的。创建{
var filteredList=CopyOnWriteArrayList()//mutableListOf()
val headerItem:SearchResultModel=SearchResultModel()
headerItem.type=0
headerItem.title=context.getString(R.string.top\u匹配\u标签)
filteredList.add(标题项)
for(ContSyncApplication.getContacts()中的行){
if(listOfDocId.contains(row.docId)){
val myData:SearchResultModel=SearchResultModel()
myData.type=1
myData.docId=row.docId
myData.name=row.display\u name
如果(!row.profile_image.isNullOrBlank()){
myData.imagePath=row.profile\u image!!
}
filteredList.add(myData)
if(IsActVityLogById&&DatabaseQueryHelper.checkActivityLogById(row.docId)){
val myactivityData:SearchResultModel=SearchResultModel()
myactivityData.type=1
myactivityData.docId=行.docId
myactivityData.name=row.display\u name
myactivityData.imagePath=row.profile\u图像?:“”
mActvityList.add(myactivityData)
}
}
}
如果(mActvityList.size>0){
val activityHeader:SearchResultModel=SearchResultModel()
activityHeader.type=0
activityHeader.title=“活动日志”
filteredList.add(activityHeader)
filteredList.addAll(mActvityList)
}
it.onNext(过滤器列表)
it.onComplete()
}
}
当我在列表中执行并添加数据时,我得到了一个
ConcurrentModificationException
。有人能给我建议如何执行循环,以便我能解决这个问题吗?我必须搜索并添加到列表中。检查您是否在使用遍历每个
时修改了相同的集合。如果要修改同一个集合,则需要使用迭代器
检查在遍历时是否对每个使用修改相同的集合。如果要修改同一个集合,则需要使用迭代器
val templast=arrayListOf()
val tempList = arrayListOf<MyObject>()
tempList.addAll(currentList)
currentList.forEach {
if (condition to remove here) {
tempList.remove(it)
}
}
currentList = tempList
tempList.addAll(当前列表)
currentList.forEach{
如果(此处移除的条件){
圣殿骑士,移除(它)
}
}
currentList=模板列表
val templast=arrayListOf()
tempList.addAll(当前列表)
currentList.forEach{
如果(此处移除的条件){
圣殿骑士,移除(它)
}
}
currentList=模板列表
使用迭代器对列表进行迭代时,不能直接修改列表。我建议你选择普通的旧套圈。对于(int i=0;i