映射推针 - 限制屏幕/ concurrentModificationException

时间:2011-07-19 17:54:11

标签: android map

所以我正在扩展ItemizedOverlay,并使用rest查询向web服务发出异步http请求,在那里我可以获得许多推针的坐标。

一旦处理程序获得异步http请求,我就会执行以下操作(可能不是最佳解决方案 - 即一直清除所有记录)。但我愿意接受建议(因此是帖子)..

基本上这里是代码流(我在一个鳍状肢上有一个列表视图和地图视图,并希望保持它们同步 - 因此是arrayAdapter;

locationRecords.clear(); // ArrayList<LocationRecord>
updateScreen(jArray); // jSONArray jArray
arrayAdapter.notifyDataSetChanged();
updateOverlay();


private synchronized void updateOverlay() {

// Clear the previous overlay of map push pins (don't want to keep adding new overlays)
       Iterator<Overlay> listofOverlays = mapView.getOverlays().iterator();
   while (listofOverlays.hasNext()) {
         Overlay tempOverlay = listofOverlays.next();
         if (tempOverlay.getClass().equals(MunzeeOverlay.class)) {
            mapView.getOverlays().remove(tempOverlay);
         }
            this.notify();
    }

    MyOverlay overlay = new MyOverlay(MapTools.getGreenMarker(mContext),mapView);

    Iterator<LocationRecord> mapList = locationRecords.iterator();  
    while (mapList.hasNext()) { 
        overlay.addOverlay(mapList.next().getOverlayItem()); 
    }

    mapView.getOverlays().add(overlay);
  }

  protected void updateScreen(JSONArray jArray) {
        if ( jArray != null ) {
          for ( int i = 0; i < jArray.length(); i++ ) {
            try {
                JSONObject myArray = jArray.getJSONObject(i);
            locationRecords.add(new LocationRecord(myArray,mContext));
        } catch (JSONException e) {     
            e.printStackTrace();
        }
           }
        }
  }

我的想法是在myOverlay上我可以检查当我使用等效检查addOverlay并确保它不存在时,那样我就不需要删除地图上的叠加层了?

我也在updateOverlay中看到一些ConcurrentModificationExceptions(我想这可能不得不以同步的方式清除locationRecords&amp; updatesScreen .. Sooo ..

1)有关提高地图引脚性能的建议,并且在更新叠加层时似乎不会冻结地图

2)有关修复ConcurrentModificationExceptions的任何建议吗?

1 个答案:

答案 0 :(得分:1)

  1. 有一个带N针的覆盖层。我可以说,你有N个覆盖层,每个覆盖层有一个引脚。这很糟糕。

  2. 当您的数据到达时,请在单独覆盖图上调用populate()让Android重新加载所有标记 - 您无需自行清除任何内容。