ConcurrentModificationException в MapActivity - PullRequest
0 голосов
/ 09 декабря 2010

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

Теперь у меня есть 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.

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

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

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

ирвейн

1 Ответ

0 голосов
/ 13 февраля 2011

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

Переместите вызовы add overlay в onPostExecute() (который вы должны переопределить) в GetPOITask.

...