Android 从Firebase数据库中删除特定值

Android 从Firebase数据库中删除特定值,android,android-studio,firebase,firebase-realtime-database,Android,Android Studio,Firebase,Firebase Realtime Database,我想从Firebase数据库中删除特定值,以下是我存储的数据库 现在,我想删除以下值 fname:“约翰” lname:“wick” 这里是我试图从Firebase中删除的特定值。 DatabaseReference demo = mReference.child("demo").orderByValue().equalTo("John").getRef(); demo.addListenerForSingleValueEvent(new ValueEventListener()

我想从Firebase数据库中删除特定值,以下是我存储的数据库

现在,我想删除以下值

fname:“约翰”

lname:“wick”

这里是我试图从Firebase中删除的特定值。

DatabaseReference demo = mReference.child("demo").orderByValue().equalTo("John").getRef();

    demo.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            dataSnapshot.getRef().removeValue();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
但这将从数据库中删除所有值

问题
如何删除该特定值???我必须为此做些什么

任何帮助都将不胜感激。

您可以尝试:

mReference.child("demo").orderByChild("fname").equalTo("John").addListenerForSingleValueEvent(
                new ValueEventListener() {
                    @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                 dataSnapshot.getRef().setValue(null);
            }


           @Override
             public void onCancelled(DatabaseError databaseError) {
                  Log.w("TodoApp", "getUser:onCancelled", databaseError.toException());
             }
   });

不要为SingleValueEvent使用
AddListener
尝试使用
addChildEventListener
,如下所示:

Query queryRef = mReference.child("demo").orderByChild("fname").equalTo("John");

queryRef.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot snapshot, String previousChild) {
      snapshot.getRef().setValue(null);
    }
});

嗨,请尝试使用此代码

    mReference.child("demo").orderByChild("fname").equalTo("John").addListenerForSingleValueEvent(
            new ValueEventListener() {
                @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            mReference.child("demo").child(dataSnapshot.getKey()).setValue(null);
        }

       @Override
         public void onCancelled(DatabaseError databaseError) {
              Log.w("TodoApp", "getUser:onCancelled", databaseError.toException());
         }
});

好的,感谢大家,经过大量的回答和询问修改后。。这就是我的工作原理

mReference.child("demo").orderByChild("fname").equalTo("John").addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            mReference.child("demo").child(dataSnapshot.getKey()).setValue(null);

            //also work
            //dataSnapshot.getRef().setValue(null);  
        }

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

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

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

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

试试这个代码。希望这能对你有所帮助 谢谢

database.getReference().child(“组”).child(groupItem.getGroupkey()).child(“成员”).child(groupMember.getKey()).removeValue().addOnSuccessListener(新建OnSuccessListener()){
@凌驾
成功时公开作废(作废避免){
新CustomMessage(GroupDetailsActivity.this,“已成功删除”);
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
showlogD(“ERROR_MSG”,e.getMessage());
}
});

数据库结构:

已尝试此操作,但不起作用<代码>dataSnapshot.getRef().removeValue()和
dataSnapshot.getRef().setValue(null)两者都是一样的东西。。阅读firebase文档。。您是否尝试:
mReference.child(“演示”).orderByChild(“fname”).equalTo(“John”)
谢谢您的回复,,。。但是什么也没发生@UttamPanchasara请检查我的答案现在我更新了!非常感谢。你的解决方案像魅力一样有效,也可以检查我的答案,这也是我的工作。谢谢。。对于你们的回答,我已经在你们的答案中找到了一些修改后的答案。看看我的解决方案。
database.getReference().child("Groups").child(groupItem.getGroupkey()).child("members").child(groupMember.getKey()).removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
                                   @Override
                                   public void onSuccess(Void aVoid) {
                                       new CustomMessage(GroupDetailsActivity.this, "Successfully deleted");
                                   }
                               }).addOnFailureListener(new OnFailureListener() {
                                   @Override
                                   public void onFailure(@NonNull Exception e) {
                                       Customlog.showlogD("ERROR_MSG",e.getMessage());
                                   }
                               });