从firebase android中删除一个子系统?

从firebase android中删除一个子系统?,android,google-maps,firebase,firebase-realtime-database,google-maps-markers,Android,Google Maps,Firebase,Firebase Realtime Database,Google Maps Markers,为什么我不能删除标记 onChildRemoved()--无响应。问题是您正在添加一个值更改侦听器,因此只有在删除子项后才会调用onChildRemoved(),但您正在回调函数中删除它 试着这样做: mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(com.goog

为什么我不能删除标记


onChildRemoved()
--无响应。

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

试着这样做:

        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;
            }
        });

查询返回存在匹配项的datasnapshots集合。然后你需要对它们进行迭代,删除它们中的每一个。

它会删除数据库中的所有子项,如何处理?要看到它被删除,我必须重新启动活动。
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());
        }
    });