【问题标题】:ConcurrentModificationException in MapActivityMapActivity 中的 ConcurrentModificationException
【发布时间】:2010-12-09 15:39:18
【问题描述】:

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

现在,我有一个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);
 }

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

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),但我真的找不到我做错了什么。

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

提前致谢,

艾尔温

【问题讨论】:

    标签: android android-mapview concurrentmodification mapactivity


    【解决方案1】:

    这可能是因为addOverlayToList() 是从connect() 调用的,而connect() 在不同的线程(doInBackground()) 中调用。只有启动 UI 的线程才能触摸它的视图。

    将添加覆盖调用移动到GetPOITaskonPostExecute()(您应该覆盖)。

    【讨论】:

      猜你喜欢
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-23
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多