为什么firebase在我的查询中输入ondatachange

时间:2017-07-07 07:18:23

标签: android firebase firebase-realtime-database

我的数据库非常简单

TokenAdmin:
---xccsaccxvkkgmcdds :
     ---token: "cxcxzcfsdfdsfdsfs"
     ---uid: "xccsaccxvkkgmcdds"
---hjhbnghtfgdgdgdffg :
     ---token: "vhghtytyryyr"
     ---uid: "hjhbnghtfgdgdgdffg"

现在在我的代码中,我想检查并执行一些代码,只要它发现uid等于" hjhbnghtfgdgdgdffg" 这是我的代码:

 mDatabase.child("TokenAdmin").orderByChild("uid").equalTo(mycurrUser.getUID()).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

               //say here toast "A"
            } else {
                //toast "B"
            }



        }
        @Override
        public void onCancelled(DatabaseError databaseError) {

            // ...

        }


    });

现在我运行代码,mycurrUser.getUID()值设置为" xxx"我没有在数据库中列出。我期望代码输出是吐司B,但我总是得到吐司A,在我的理解中,它已经在db中找到了值。如何解决这个问题,我哪里做错了?

2 个答案:

答案 0 :(得分:2)

您需要使用以下内容:

mDatabase.child("TokenAdmin").orderByChild("uid").equalTo(mycurrUser.getUID()).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(dataSnapshot.exists()) {
            //Toast A
        } else {
            //Toast B
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
});

希望它有所帮助。

答案 1 :(得分:1)

我很困惑您为什么要使用查询来加载用户。您似乎已将令牌存储在UID键下,因此可以使用:

mDatabase.child("TokenAdmin").child(mycurrUser.getUID()).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()) {
            ... user exists
        } else {
            ... user node does not exist
        }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException(); // don't ignore errors
    }
});