MapActivity中的ConcurrentModificationException

时间:2010-12-09 15:39:19

标签: android android-mapview concurrentmodification mapactivity

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

现在,我有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

1 个答案:

答案 0 :(得分:0)

这可能来自addOverlayToList()connect()调用的事实,该doInBackground()在不同的线程(onPostExecute())中调用。只有启动了UI的线程才能触及其视图。

将添加重叠式调用移至GetPOITask的{​​{1}}(您应该覆盖)。