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
,