【问题标题】:Delete a child from firebase android?从firebase android中删除一个孩子?
【发布时间】:2018-08-19 14:06:36
【问题描述】:
        mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(com.google.android.gms.maps.model.Marker marker) {
//                Toast.makeText(Map.this, marker.getPosition()+"", Toast.LENGTH_SHORT).show();

                Query query = databaseReferenceMarkers.orderByChild("lat").equalTo(marker.getPosition().latitude);
                query.addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    }

                    @Override
                    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                    }

                    @Override
                    public void onChildRemoved(DataSnapshot dataSnapshot) {
                        Toast.makeText(Map.this, "test", Toast.LENGTH_SHORT).show();
                        dataSnapshot.getRef().removeValue();
                    }

                    @Override
                    public void onChildMoved(DataSnapshot dataSnapshot, String s) {

                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
                return true;
            }
        });

为什么我无法删除标记?

onChildRemoved() -- 没有回应。

【问题讨论】:

    标签: android google-maps firebase firebase-realtime-database google-maps-markers


    【解决方案1】:

    问题是您正在添加一个值更改侦听器,因此只有在您移除子项后才会调用 onChildRemoved(),但您在回调函数中将其移除。

    试试这样:

    Query query = databaseReferenceMarkers.orderByChild("lat").equalTo(marker.getPosition().latitude);
    query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
    
           for (DataSnapshot child: dataSnapshot.getChildren()) { child.getRef().removeValue(); }
    
    
            }
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.e(TAG, "onCancelled", databaseError.toException());
            }
        });
    

    查询返回匹配的数据快照集合。然后你需要遍历它们,删除它们中的每一个。

    【讨论】:

    • 它删除了数据库中的所有孩子,如何处理?要看到它被删除,我必须重新启动活动。
    猜你喜欢
    • 1970-01-01
    • 2019-08-08
    • 2021-03-11
    • 2018-03-08
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多