在Firebase

时间:2016-06-04 16:26:13

标签: android firebase

我有一个firebase数据结构,如下所示:

|---groups
|       |---group1
|       |       |---membernames
|       |              |---xy_unknownid
|       |                  |---givenname: "userx"
|       |              |---tv_unknownid
|       |                  |---givenname: "usery"

现在我要删除节点xy_unknownid。但我只知道“givenname”:userx。

我尝试删除节点:

mFirebaseDatabaseReference
.child("groups")
.child("group1")
.child("membernames")
.child("$member")
.child("userx")
.getParent()
.setValue(null);

但这不起作用,因为“无效的Firebase数据库路径:$ member.Firebase数据库路径不得包含'。','#','$','['或']'”

所以我的问题是,如何删除节点:“xy_unknownid”只知道:“userx”。

提前致谢。

2 个答案:

答案 0 :(得分:1)

试试这段代码并告诉我这是否有效,

mFirebaseDatabaseReference.child("groups").child("group1").child("membernames").addListenerForSingleValueEvent(new ValueEventListener() {
   @Override
   public void onDataChange(DataSnapshot snapshot) {
      for(DataSnapshot dataSnapshot1:snapshot.getChildren())
      {
         if(dataSnapshot1.child("givenname").getValue().toString().equals("userx"))
         {
             dataSnapshot1.getRef().setValue(null);
             break;
         } 
      }

   }
   @Override
   public void onCancelled(FirebaseError firebaseError) {
   }
});

答案 1 :(得分:0)

您需要分两步完成:

  1. 使用query:

    获取xy_unknownid
    mFirebaseDatabaseReference.child("groups").child("group1").child("membernames"). orderByChild("givenname").equalTo("user")
    
  2. 在回调中获得响应后,您可以使用

    获取密钥
    dataSnapshot.getKey()
    
  3. 并使用该密钥使用setValue(null)removeValue()