ConcurrentModificationException с изменяемым списком от Observer - PullRequest
0 голосов
/ 09 июля 2020

Grettings, не мог бы кто-нибудь мне помочь с этим, я уже реализовал список aux для добавления элементов, поступивших от наблюдателя, но проблема все еще сохраняется, ConcurrentModificationException происходит в строке addAll.

Находится внутри класса фрагмента, у меня был наблюдатель, который пришел от менеджера проекта, который предоставляет список элементов, которые будут отображаться в Arraylist

manager.getMutableList()
            .observe(viewLifecycleOwner, Observer { mutableList ->
                val auxList = mutableListOf<CustomClass>().apply {
                    addAll(mutableList)
                }
                if (auxList.isNotEmpty()) {
                    ...
                } else {
                    ...
                }

                (recyclerView.adapter as RecyclerAdapter).run {
                    items = auxList
                    notifyDataSetChanged()
                    ...
                }
            })

Это трассировка стека

java.util.ArrayList$SubList.size (ArrayList.java:1057)
java.util.ArrayList.addAll (ArrayList.java:588)
com.project.project.Fragment$setObservers$6.onChanged (Fragment.java:330)
com.project.project.Fragment$setObservers$6.onChanged (Fragment.java:74)
androidx.lifecycle.LiveData.considerNotify (LiveData.java:131)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1101)

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 09 июля 2020

Проблема в том, что вы изменяете свой mutableList из потока, отличного от основного потока. Лучший способ также избежать этих исключений - сделать ваш список неизменяемым (так что просто List вместо MutableList).

Весь код, который хочет его изменить, затем должен сделать собственная копия:

val copy = list.toMutableList()
copy.add(...)
...