Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何修复Kotlin中的并发修改异常_Android_Kotlin - Fatal编程技术网

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