Firebase - 删除没有父键的特定值

时间:2018-02-01 19:15:15

标签: java android firebase-realtime-database listener

我正在尝试从Firebase中的节点中删除值。 似乎没有达到onDataChange。

我尝试查找文档和文章,并使用了我在多个地方引用的一些代码(例如Remove Specific value From Firebase Database)。不会调用onDataChange中的日志语句,而是调用之前的日志语句。电子邮件的范围很好,日志声明可以看到

I/emailRemove: 111@aol.com
I/removeEmail: Inside Method

在此示例中,我想删除电子邮件“111@aol.com”的任何区域: Delete Email

private void removeEmail() {
        Log.i("emailRemove", email);
        Log.i("removeEmail","Inside Method");

        Query emailQuery = mDatabase.child("emailAddress").equalTo(email);

        emailQuery.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot emailSnapshot: dataSnapshot.getChildren()) {
                    Log.i("snapshot", emailSnapshot.toString());
                    Log.i("snapshotRef", emailSnapshot.getRef().toString());
                    emailSnapshot.getRef().removeValue();
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.e("TAG", "onCancelled", databaseError.toException());
            }
        }); 
    }

1 个答案:

答案 0 :(得分:0)

由于您希望按子属性进行过滤,因此应使用orderByChild(...)

Query emailQuery = mDatabase.orderByChild("emailAddress").equalTo(email);

emailQuery.addListenerForSingleValueEvent(new ValueEventListener() 

您还需要确保对RC9...运行此查询,因为这是子节点具有emailAddress属性的唯一节点。