这是我在这里的第一个问题,所以如果有什么问题,请告诉我。
现在,我有一个public class MainMap extends MapActivity,它使用MyLocationListener作为用户的位置,并使用HelloItemizedOverlay。我从一个XML文件中得到了一些POI,我想添加标记(非常基本的覆盖)。
用户按下一个按钮,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。
我搜索过这个站点,读过类似的线程(例如这一个),但是我真的找不到我做错了什么。
了解我自己,这可能是显而易见的事情。
提前谢谢你,
亚尔温
发布于 2011-02-12 23:05:31
这可能是因为addOverlayToList()是从connect()调用的,后者在不同的线程(doInBackground())中调用。只有启动UI的线程才能触摸其视图。
将添加覆盖调用移动到onPostExecute() (您应该重写)的GetPOITask中。
https://stackoverflow.com/questions/4400013
复制相似问题