#android #list #concurrentmodificationexception
Вопрос:
У меня проблема с исключением ConcurrentModificationException. Вот моя часть кода :
var deltaSum = 0
arrDeltaBrainWaves.map {
value -> deltaSum = value
}
Чтобы было ясно — я знаю, почему появляется эта ошибка 🙂 Проблема в том, что я понятия не имею, каково решение ? Действительно ли мне нужно создать новый временный список и поместить туда значения ? Это просто не имеет смысла 🙂 Есть какие-нибудь варианты получше, пожалуйста ?
Редактировать:
Я изменил код на следующий :
var deltaSum = 0
with(arrDeltaBrainWaves.iterator()) {
forEach {
deltaSum = it
}
}
avgDelta = deltaSum / arrDeltaBrainWaves.size
Но проблема все еще существует.
Ответ №1:
вам нужно использовать итераторы
пример:
val myCollection = mutableListOf(1,2,3,4)
val iterator = myCollection.iterator()
while(iterator.hasNext()){
val item = iterator.next()
//do something
}
это позволит избежать исключений ConcurrentModificationExceptions
Комментарии:
1. К сожалению, проблема все еще существует. Пожалуйста, смотрите отредактированный пост.
2. @Bartos Основная причина возникновения этого исключения заключается в том, что у вас может быть какой-то код, который изменяет этот массив. Просто протестируйте два пункта и дайте мне знать об этом. во-первых, добавьте
Volatile
в свой массив и запустите свой код внутриSynchronized
блоков. секонд, не могли бы вы изменить массив на хэшмап? если да, это должно решить это исключение.
Ответ №2:
Исключения ConcurrentModificationException можно избежать с помощью итераторов. Вот способ котлина сделать это:
with(arrDeltaBrainWaves.iterator()) {
forEach {
}
}
Комментарии:
1.К сожалению, проблема все еще существует. Пожалуйста, смотрите отредактированный пост.
2. Я попробовал код, но не вижу никаких исключений. Вы уверены, что исключение вызвано этим фрагментом кода. Не могли бы вы добавить еще свой код, пожалуйста?