Java 使用android删除firebase中的元素

Java 使用android删除firebase中的元素,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我有一个firebase数据结构,如下所示: |---employees |----KJSXd4ScEmJ6N4UFc5k |---employeeName:"semah" |---employeeAge:"24" |----KJW3HRh5kxm_FgU9nNV |---employeeName:"Alex" |---employeeAge:"3

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

    |---employees
         |----KJSXd4ScEmJ6N4UFc5k 
             |---employeeName:"semah"
             |---employeeAge:"24"
         |----KJW3HRh5kxm_FgU9nNV
             |---employeeName:"Alex"
             |---employeeAge:"35"
现在我想删除节点KJSXd4ScEmJ6N4UFc5k。但我只知道“employeeName”:semah。 我尝试删除节点时使用了:

mFirebaseDatabaseReference
.child("employees")
.child("employeeName")
.child("semah")
.getParent()
.setValue(null);
但这不起作用,因为“无效的Firebase数据库路径:$member.Firebase数据库路径不能包含“.”、“#”、“$”、“[”或“].””

所以我的问题是,我如何删除节点:“-KJSXd4ScEmJ6N4UFc5k”只知道:“semah”或者如何通过生成的id删除元素“-KJSXd4ScEmJ6N4UFc5k”


提前感谢。

在您的情况下,您可以构建一个查询来检索要删除的项目。
比如:

Firebase refEmployees = new Firebase("..../employees");
Query queryRef = refEmployees.orderByChild("name").equalTo("semah");


queryRef..addListenerForSingleValueEvent(
            new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
             String key=snapshot.getKey(); 
             //Remove the item
        }


       @Override
         public void onCancelled(DatabaseError databaseError) {

         }
});

由于您没有对键
KJSXd4ScEmJ6N4UFc5k
的引用,因此需要检索该值并尝试使用检索到的值的引用删除它。像这样的

 database.getReference("employees").orderByChild("employeeName").equalTo("semah").addListenerForSingleValueEvent(
                new ValueEventListener() {
                    @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot child: dataSnapshot.getChildren()) {
                child.getRef().setValue(null);
            }
        }


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

没有人能回答我的问题?如何删除添加后的子元素,我想从firebase中删除元素而不是添加。使用侦听器从查询中检索数据以获取要删除的项。firebae for java中是否有方法获取密钥“KJSXd4ScEmJ6N4UFc5k”?此方法将获取该值,您可以使用
onDataChange
中的
dataSnapshot.getKey()
获取密钥。我的代码将删除该ref的相同值。如何使用removeValue()方法?我添加了显示如何使用该方法的代码。你还需要什么?调用
setValue(null)
removeValue()
执行相同的操作。但是有一个问题,如果在firebase中有两个employeeName具有相同的值,那么如何知道要删除哪个值,因此在这种情况下,我们应该知道firebase生成的密钥?