ConcurrentModificationException в MapActivity

Это мой первый вопрос здесь, так что если что-то не так, скажите.

Теперь у меня есть public class MainMap extends MapActivity который использует MyLocationListener для местоположения пользователя и HelloItemizedOverlay. Я получаю определенные POI из XML-файла, в который я хочу добавить маркеры (довольно простые оверлеи).

Пользователь нажимает кнопку, AsyncTask запускается:

private class GetPOITask extends AsyncTask<String, Void, Void> {

 protected Void doInBackground(String... params) {
    clearMapOverlay();
    if(!isBusyAddingOverlays)
    {
       connect(params[0]);
    }
    return null;
 }

 protected void onPreExecute() {
  clearMapOverlay();
 }
}

Очистка MapOverlay (this.mv является MapView):

public void clearMapOverlay()
 {
  this.mv.getOverlays().remove(placesItemizedOverlay);
  this.mv.postInvalidate();
  this.mv.getOverlays().add(myLoc);
 }

Это метод, который вызывает мой метод connect, когда у меня достаточно информации для добавления маркера:

private void addOverlayToList(int id, GeoPoint point, String title, String description)
{
 //Log.e("Debug", "Adding overlay");
 placesItemizedOverlay.addOverlay(new POIOverlay(id, point, title, description));
 this.mv.getOverlays().add(placesItemizedOverlay);
}

Это должен быть весь соответствующий код.

Проблема в том, что когда я добавляю POI и увеличиваю карту (или перемещаю ее), я получаю ConcurrentModificationException,

Я искал этот сайт, читая похожие темы (например, эту), но я не могу найти, что я делаю неправильно.

Зная себя, это, наверное, что-то очевидное.

Заранее спасибо,

iarwain

1 ответ

Это может быть связано с тем, что addOverlayToList() вызывается из connect() который вызывается в другой теме (doInBackground()). Только поток, инициировавший пользовательский интерфейс, может касаться его представлений.

Переместить добавленные вызовы наложения в onPostExecute() (который вы должны переопределить) из GetPOITask,

Другие вопросы по тегам