我需要检查新创建的OverlayItem的数据是否已经存在于已经显示在地图上的OverlayItems列表中。我编写了一段代码来检查OverlayItem的数据是否已经存在,但我遇到了一个错误。如何从覆盖图中提取OverlayItem?
我现在的代码是这样的:
//where mapOverlays = mapView.getOverlays() and overlayItem is the newly created overlayItem
public boolean isExisting(List<Overlays> mapOverlays, OverlayItem overlayItem)
{
ItemizedOverlay overlay;
OverlayItem itemToCompare;
for(int i = 0; i < mapOverlays.size(); i++)
{
overlay = (ItemizedOverlay)mapOverlays; //I am getting an error here: java.util.Collections$SynchronizedRandomAccessList (from e.getMessage()). The stack trace does not contain any specific exception but only the trace of the error pointing to this line.
existingOverlayItem = overlay.getItem(i);
if(itemToCompare.getPoint().equals(overlayItem.getPoint())
&& itemToCompare.getSnippet().equals(overlayItem.getSnippet())
&& itemToCompare.getTitle().equals(overlayItem.getTitle()))
return true; //if all data are the same
}
return false;
}发布于 2012-02-13 17:20:01
感谢大家回答我的问题。我发现我的问题发生是因为我把mapOverlays分配给了一个错误的类。
而且,我并没有从mapOverlays中提取OverlayItem (我不知道是怎么做的),我只是在addOverlay(OverlayItem overlayItem)中进行了验证。我不能这样做,因为我总是重新初始化我的itemizedOverlay的值。因此,我不能将新添加的OverlayItem与旧的进行比较,因为itemizedOverlay不再保存旧的值。我所做的不是总是重新初始化itemizedOverlay,而是总是清除等于mapView.getOverlays().clear()的mapOverlays。
发布于 2012-02-10 17:59:36
我不知道MapOverlay,但是你可能不能把List放到MapOverlay中
发布于 2012-02-10 18:15:37
这段代码看起来有点奇怪。未来的itemToCompare将何去何从?我在任何地方都看不到它的声明。如果itemToCompare和overlayItem是同一个类,为什么不覆盖类中的equals并使用它,而不是比较每个参数呢?
更好的是,重写类中的equals将允许您访问:
mapOverlays.contains(overlayItem); 因此,上面的调用将替换您的整个isExisting方法。您可以查看有关equals如何工作的here的更多信息。
https://stackoverflow.com/questions/9225691
复制相似问题