0

这是我的第一个问题,所以如果有什么不对,请告诉。MapActivity中的ConcurrentModificationException

现在,我有一个public class MainMap extends MapActivity它使用MyLocationListener为用户的位置和HelloItemizedOverlay。 我从一个XML文件中获取某些POI,我想添加标记(漂亮的基本Overlays)。

用户按下一个按钮,启动的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); 
} 

这是我的连接,方法调用方法时我有足够的信息添加标记:

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

我已经通过这个网站搜索,阅读类似的线程(例如this one),但我不能真正找到我做错了什么。

了解自己,这可能是明显的。

由于提前,

iarwain

回答

0

这可能来自于以下事实:addOverlayToList()connect()被称为在不同的线程(doInBackground())调用。只有启动UI的线程才能触及其视图。

将附加覆盖呼叫移动到onPostExecute()(您应该覆盖)GetPOITask