我试图检查是否存在具有特定电子邮件的用户。使用此电子邮件的用户位于数据库中,因此检查应返回true而不是false。
这是架构:
以下是代码:
final DatabaseReference userRef = FirebaseDatabase.getInstance().getReference().child("users");
userRef.orderByChild("email").equalTo("rafael.adel20@gmail.com").limitToFirst(1).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println(dataSnapshot); //returns { key = users, value = null }
if(dataSnapshot.getChildrenCount() > 0) {
//user already exists (Never executed)
} else {
//user doesn't exists (Always executed)
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
答案 0 :(得分:2)
如果调用了setPersistenceEnabled(true)
,使用addListenerForSingleValueEvent
会导致返回本地缓存版本的数据而不是服务器的最新版本(而调用addValueEventListener
将确保您获得最新版本) 。如果使用addListenerForSingleValueEvent
,另一种方法是调用query.keepSynced(true);