如何检查FireBase(Android)中是否存在特定子值

时间:2018-06-17 20:01:45

标签: android firebase firebase-realtime-database

我在尝试检查用户信息是否已存储在FireBase数据库中时遇到了一些麻烦。 基本上我正试图做一些像这样的蠢事: “从用户中选择user_name,其中user_id =”+ userID +“ 如果昵称存在,它应该使布尔变量isFirstTime = false,如果不存在,它应该保持为真。之后它应该显示注册框。

这是我的数据库: Firebase 这是我在onCreate方法中的代码:

databaseReference = FirebaseDatabase.getInstance().getReference();
    DatabaseReference dbRefFirstTimeCheck = databaseReference.child("User").child(user.getUid()).child("Nickname");

    isFirstTime = true;
    dbRefFirstTimeCheck.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.getValue() != null) {
                isFirstTime=false;
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

    if(isFirstTime) {
        showNewUserBox();
    }
    else {

    }

无论我做什么,都会调用methor showNewUserBox()。如何获取我需要的数据并检查它是否存在?

1 个答案:

答案 0 :(得分:0)

正如其他人所评论的那样,数据是从Firebase异步加载的。当您检查isFirstTime时,数据尚未加载,onDataChange尚未运行,因此ifFirstTime将具有其默认值({{ 1}}表示布尔值。

所有需要数据库数据的代码都应该在false内(或从那里调用)。对代码的最简单修复是:

onDataChange

另请参阅许多questions about asynchronous loading from Firebase中的一些内容,例如getContactsFromFirebase() method return an empty list(或相当古老的经典:Setting Singleton property value in Firebase Listener)。