这是我的第一个问题,所以如果有什么不对的话,请告诉。
现在,我有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-method调用的方法:
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 :(得分:0)
这可能来自addOverlayToList()
从connect()
调用的事实,该doInBackground()
在不同的线程(onPostExecute()
)中调用。只有启动了UI的线程才能触及其视图。
将添加重叠式调用移至GetPOITask
的{{1}}(您应该覆盖)。