我在尝试检查用户信息是否已存储在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()。如何获取我需要的数据并检查它是否存在?
答案 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)。