android - 如何修复 Kotlin 中的并发修改异常

标签 android kotlin

这是我的代码,我在其中向列表添加数据:

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()
    }
}

当我在列表中执行和添加数据时,我收到了 ConcurrentModificationException。任何人都可以向我建议如何执行循环以便我可以解决这个问题吗?我必须搜索并添加到列表中。

最佳答案

检查您是否在使用for each 遍历时修改同一个集合。如果你想修改同一个集合,你需要使用 iterator

关于android - 如何修复 Kotlin 中的并发修改异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49664617/

相关文章:

android - 使用 EditText 在 ListView 中搜索

android - 将 POJO 转换为数据类 Kotlin

Kotlin 惰性属性取决于在 init 中初始化的另一个属性

android - 将 Dispatcher.Main 与 delay() 一起使用是个好主意吗?

kotlin - 何时为类中的协程指定 Dispatchers.xxx

android - 在 android 中安排一个作业在特定时间运行

java - AndroidStudio :Cannot resolve symbol 'MainActivity' . 使用 AndroidAnnotations

android - clearTaskOnLaunch 如何操作?

Android EditText 库类似于 Path?

Android - 华为设备的 android.security.IKeystoreService.del 中的 NullPointerException