0

这是我在这里的第一个问题,所以如果有什么问题,请告诉我。

现在,我有一个public class MainMap extends MapActivity用于MyLocationListener用户位置的 a 和一个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);
 }

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

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.

我已经搜索了这个站点,阅读了类似的线程(例如这个),但我真的找不到我做错了什么。

了解我自己,这可能是显而易见的。

提前致谢,

艾尔万

4

1 回答 1

0

这可能来自于在不同的线程 ( )中addOverlayToList()被调用的事实。只有启动 UI 的线程才能触摸它的视图。connect()doInBackground()

将添加覆盖调用移动onPostExecute()GetPOITask.

于 2011-02-12T23:05:31.130 回答