自firebase以来删除标记时删除

Posted

技术标签:

【中文标题】自firebase以来删除标记时删除【英文标题】:remove marker when is deleted since firebase 【发布时间】:2018-11-24 12:38:12 【问题描述】:

我是 android 新手,我按照以下教程进行操作: https://codelabs.developers.google.com/codelabs/realtime-asset-tracking/index.html#0

为了实时跟踪,好吧,我的问题是在firebase中删除标记时如何从地图中删除,代码如下:

private void subscribeToUpdates() 
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("locations").child("unidad_1");
    ref.addChildEventListener(new ChildEventListener() 
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) 
            setMarker(dataSnapshot);
        

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) 
            setMarker(dataSnapshot);
        

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) 

        

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) 
            removeMarker(dataSnapshot);
        

        @Override
        public void onCancelled(DatabaseError error) 
            Log.d(TAG, "Failed to read value.", error.toException());
        
    );


private void removeMarker(DataSnapshot dataSnapshot) 
    String key = dataSnapshot.getKey();
    HashMap<String, Object> value = (HashMap<String, Object>) dataSnapshot.getValue();

    if (!mMarkers.containsKey(key)) 
        mMarkers.remove(key);
    



private void setMarker(DataSnapshot dataSnapshot) 
    // When a location update is received, put or update
    // its value in mMarkers, which contains all the markers
    // for locations received, so that we can build the
    // boundaries required to show them all on the map at once
    String key = dataSnapshot.getKey();
    HashMap<String, Object> value = (HashMap<String, Object>) dataSnapshot.getValue();
    double lat = Double.parseDouble(value.get("latitude").toString());
    double lng = Double.parseDouble(value.get("longitude").toString());
    LatLng location = new LatLng(lat, lng);
    if (!mMarkers.containsKey(key)) 
        mMarkers.put(key, mMap.addMarker(new MarkerOptions().title(key).position(location)));
     else 
        mMarkers.get(key).setPosition(location);
    


    LatLngBounds.Builder builder = new LatLngBounds.Builder();
    for (Marker marker : mMarkers.values()) 
        builder.include(marker.getPosition());
    
    mMap.animateCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 0));

完成这项工作的正确方法是什么? 提前致谢!

【问题讨论】:

请编辑您的问题(下面有一个链接)以包含setMarker 的代码。没有它就很难猜到为什么removeMarker 不起作用。 我已经更新了问题 【参考方案1】:

在您的 removeMarker() 方法中,将您的代码更改为如下所示:

if (mMarkers.containsKey(key)) 
    Marker marker = mMarkers.remove(key);
    if(marker != null)
        marker.remove();
    

我假设mMarkersHashMap。在这种情况下,使用remove(key) 删除条目将从您的HashMap 中删除该条目并返回Marker(如果不存在则返回null)。然后只需使用标记的remove 方法将其从地图中删除。

您的代码的另一个问题是您检查HashMap 是否不包含。所以该代码可能不会执行。

编辑

您可能将mMarkerHashMapMapMarker 混淆了。 “mMarker”对于编码来说不是一个好名字——因为它并不明显。你应该把它改成更明显的东西,比如“mMarkerMap”。

【讨论】:

谢谢它已经奏效了!我会带你改进代码

以上是关于自firebase以来删除标记时删除的主要内容,如果未能解决你的问题,请参考以下文章

删除OAuth客户端2.0效果

使用 android studio java Recycler 视图从 Firebase 实时数据库中删除一个节点

覆盖 Firebase 应用的 DefaultInstance。重新初始化:java.lang.IllegalStateException:FirebaseApp 被删除

Vue.js 和 Firebase:删除了一个测试用户,现在所有路由都无法访问并且组件不呈现

孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档

Flutter - 如何删除单个 google_maps_flutter ^0.5.21 标记?