Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从谷歌地图中删除标记_Java_Android_Google Maps_Google Maps Api 3 - Fatal编程技术网

Java 从谷歌地图中删除标记

Java 从谷歌地图中删除标记,java,android,google-maps,google-maps-api-3,Java,Android,Google Maps,Google Maps Api 3,我似乎不明白为什么我添加到谷歌地图上的标记没有被正确删除 我根据通过回调返回给我的列表添加和删除标记。此列表每10秒更改一次,并返回一组包含预设键/id的对象。可以每隔10秒返回一个具有相同字符串键/id的对象,只要该对象位于特定半径内 我正在检查markersHashMap(表示Google地图上的标记)中的标记是否包含在新的MarkerCurrentHashMap中。如果标识在markersCurrentHashMap中不存在(因为对象超出范围/半径),我将从Google地图中删除该条目标记

我似乎不明白为什么我添加到谷歌地图上的标记没有被正确删除

我根据通过回调返回给我的列表添加和删除标记。此列表每10秒更改一次,并返回一组包含预设键/id的对象。可以每隔10秒返回一个具有相同字符串键/id的对象,只要该对象位于特定半径内

我正在检查markersHashMap(表示Google地图上的标记)中的标记是否包含在新的MarkerCurrentHashMap中。如果标识在markersCurrentHashMap中不存在(因为对象超出范围/半径),我将从Google地图中删除该条目标记,然后从HashMap中删除该条目

为什么即使从markersHashMap中正确删除了键/值对,我的标记也没有被正确删除?

这条线似乎是问题所在<代码>markersHashMap.get(key.remove()

以下是我如何根据返回的列表添加/删除特定标记。

private void updateMapMarkers(List<AnimateCarObj> carAnimateCarList) {
    animateCarObjMap.clear();
    markersCurrentHashMap.clear();

    //POPULATE CURRENT HASHMAP / ANIMATE CAR MAP
    for (AnimateCarObj ao : carAnimateCarList) {
        if (ao.isAnimating()) {
            isAnimCacheCarList.add(ao);
        }
        addAnimCarObjToMap(ao);
        addMarkerToCurrentHashMap(ao);
    }
    printAnimateCarMap();
    printCurrentMarkerMap();

    //REMOVE ALL MARKERS FROM MARKER MAP, THAT DO NOT EXIST IN THE CURRENT VIEWABLE LIST
    //removeOldMarkers();
    for (String key : markersHashMap.keySet()) {
        if (!(markersCurrentHashMap.containsKey(key))) {
            markersHashMap.get(key).remove();
            markersHashMap.remove(key);
        }
    }
    addNewMarkers();
    printMarkerMap();
}
添加创建标记,添加到hashmap

public void addMarker(String id) {
    AnimateCarObj animateCarObj = animateCarObjMap.get(id);
    Bitmap carIcon = IconUtils.loadIcon(getActivity(), "some_car_marker.png", 0,
                                                                            (int) DisplayUtils.dp2pixel(getActivity(), 50), ScaleMode.BY_HEIGHT);

    Marker marker = map.addMarker(new MarkerOptions().position(animateCarObj.getGps1())
                                                                .rotation((float) animateCarObj.getWs_CarInfoObj().getBearing())
                                                                .icon(BitmapDescriptorFactory.fromBitmap(carIcon))
                                                                .visible(true));

    addMarkerToHashMap(id, marker);
}
public void addMarkerToHashMap(String id, Marker marker) {
    setUpMarkersHashMap();
    markersHashMap.put(id, marker);
}
将标记添加到hashmap

public void addMarker(String id) {
    AnimateCarObj animateCarObj = animateCarObjMap.get(id);
    Bitmap carIcon = IconUtils.loadIcon(getActivity(), "some_car_marker.png", 0,
                                                                            (int) DisplayUtils.dp2pixel(getActivity(), 50), ScaleMode.BY_HEIGHT);

    Marker marker = map.addMarker(new MarkerOptions().position(animateCarObj.getGps1())
                                                                .rotation((float) animateCarObj.getWs_CarInfoObj().getBearing())
                                                                .icon(BitmapDescriptorFactory.fromBitmap(carIcon))
                                                                .visible(true));

    addMarkerToHashMap(id, marker);
}
public void addMarkerToHashMap(String id, Marker marker) {
    setUpMarkersHashMap();
    markersHashMap.put(id, marker);
}
以下是哈希映射的初始化方式

public void addNewMarkers() {
    for (String key : markersCurrentHashMap.keySet()) {
        if(!markersHashMap.containsKey(key)){
            addMarker(key);
        }
    }
}
public void setUpMarkersHashMap() {
    if (animateCarObjMap == null) {
        animateCarObjMap = new HashMap<String, AnimateCarObj>();
    }

    if (markersHashMap == null) {
        markersHashMap = new HashMap<String, Marker>();
    }

    if (markersCurrentHashMap == null) {
        markersCurrentHashMap = new HashMap<String, Marker>();
    }

    if (markersResultHashMap == null) {
        markersResultHashMap = new HashMap<String, Marker>();
    }
}
public void setUpMarkersHashMap(){
if(animateCarbjmap==null){
animateCarbjmap=newhashmap();
}
if(markersHashMap==null){
markersHashMap=newhashmap();
}
if(markersCurrentHashMap==null){
markersCurrentHashMap=新HashMap();
}
if(markersResultHashMap==null){
markersResultHashMap=newhashmap();
}
}

您所说的未正确移除是什么意思?这些标记在地图上仍然可见?是的。标记永远不会从地图上删除。我需要逐个删除每个标记。如果(!(markersCurrentHashMap.containsKey(key)),删除块是否满足此条件
?是否检查代码是否到达该if块内?是的,当需要删除对象时,它会使其通过该代码。删除标记后,您可以使用
addNewMarkers
添加标记。你确定它们是相同的标记吗?如果删除此方法
addNewMarkers
是否从地图中删除标记?