Решение проблемы ConcurrentModificationException с помощью Asynctask (ANDROID) - PullRequest
0 голосов
/ 29 марта 2019

Я получаю исключение ConcurrentModificationException (ArrayList), и я не знаю, как его решить, поскольку исключение встречается очень редко и не воспроизводится.

Ситуация: у меня есть главный поток с:

for(Element element : myList){
    Value value = element.getValue(); <-------- ConcurrentModificationException (ArrayList)
}

И AsyncTask с:

public class LoadMapObjectsTask extends AsyncTask<String, String, String> {
    protected String doInBackground(String... params) {
        // some other logic
        myList.remove(element);
    }
}

Я могу понять конфликт, но я не уверен, как правильно его предотвратить.Может быть, с простой синхронизацией {}?Как я могу решить это?

1 Ответ

0 голосов
/ 29 марта 2019

Возможно, вы можете изменить код так, чтобы он возвращал определенное значение, которое можно распознать как знак для удаления элемента, используя Iterator.remove():

Iterator<Element> it = myList.iterator();
while (it.hasNext()) {
  Value value = it.next().getValue()
  if (value == null) {
    it.remove();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...