删除具有特定子值的Firebase节点

时间:2019-12-28 09:08:14

标签: java android firebase firebase-realtime-database

我具有以下firebase数据库结构。我需要删除具有特定dMoble值的整个密钥

enter image description here

我尝试了下面的代码,但是没有用

 String emailID= singleToneClass.getInstance().getData();

 mDataBase=FirebaseDatabase.getInstance();
 mReferenceBooks=mDataBase.getReference("books");                       

 mReferenceBooks.orderByChild("dMoble").equalTo(emailID)
 .addListenerForSingleValueEvent(new ValueEventListener() {
                                @Override
                                public void onDataChange(DataSnapshot dataSnapshot) {
                                    mReferenceBooks.child(dataSnapshot.getKey()).removeValue();
                                }

                                @Override
                                public void onCancelled(DatabaseError databaseError) {

                                }
                            });

2 个答案:

答案 0 :(得分:1)

更改此:

@Override 
public void onDataChange(DataSnapshot dataSnapshot) {
     mReferenceBooks.child(dataSnapshot.getKey()).removeValue();
     }

对此:

@Override
  public void onDataChange(DataSnapshot dataSnapshot) {
  for(DataSnapshot ds : dataSnapshot.getChildren()){
mReferenceBooks.child(ds.getKey()).removeValue();
   }

您的引用位于节点books上,要访问key,您需要在其内部进行迭代,然后使用getKey()

答案 1 :(得分:0)

您不能删除可以清除的内容,或者另一种解决方案是可以将所有节点值存储在变量中,然后删除所有数据,然后在没有dMobile节点的情况下重新创建。