我需要检查新创建的OverlayItem的数据是否已经存在于地图上已显示的OverlayItem列表中。我做了一个代码来检查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;
}
答案 0 :(得分:0)
我不知道MapOverlay,但您可能无法将List放入MapOverlay
答案 1 :(得分:0)
该代码看起来有点奇怪。 item toTare会在哪里?我无法在任何地方看到它。如果itemToCompare与overlayItem是同一个类,为什么不在类中重写equals并使用它而不是比较每个参数?
更好的是,在班级中覆盖等号将授予您访问权限:
mapOverlays.contains(overlayItem);
因此,您的整个isExisting方法将被上面的调用替换。您可以查看有关equals如何工作的更多信息here。
答案 2 :(得分:0)
感谢大家回答我的问题。我发现我的问题发生了,因为我将mapOverlays转换为错误的类。
此外,我不是从mapOverlays中提取OverlayItem(我无法找到),而是在addOverlay(OverlayItem overlayItem)中进行验证。我以前不能这样做因为我总是重新初始化我的itemizedOverlay的值。因此,我无法将新添加的OverlayItem与旧的OverlayItem进行比较,因为itemizedOverlay不再保留旧值。我所做的不是总是重新初始化itemizedOverlay,我只是总是清除mapOverlays,它等于mapView.getOverlays()。clear()。