首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConcurrentModificationException in MapActivity

ConcurrentModificationException in MapActivity
EN

Stack Overflow用户
提问于 2010-12-09 15:39:18
回答 1查看 675关注 0票数 0

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

现在,我有一个public class MainMap extends MapActivity,它使用MyLocationListener作为用户的位置,并使用HelloItemizedOverlay。我从一个XML文件中得到了一些POI,我想添加标记(非常基本的覆盖)。

用户按下一个按钮,AsyncTask启动:

代码语言:javascript
复制
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):

代码语言:javascript
复制
public void clearMapOverlay()
 {
  this.mv.getOverlays().remove(placesItemizedOverlay);
  this.mv.postInvalidate();
  this.mv.getOverlays().add(myLoc);
 }

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

代码语言:javascript
复制
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

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

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

提前谢谢你,

亚尔温

EN

回答 1

Stack Overflow用户

发布于 2011-02-12 23:05:31

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

将添加覆盖调用移动到onPostExecute() (您应该重写)的GetPOITask中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4400013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档