2016-12-18 174 views
2

我试图检查具有特定电子邮件的用户是否存在。具有此电子邮件的用户位于数据库中,因此检查应该返回true而不是false。Firebase检查是否存在返回false,它应该返回true

这里的模式:

enter image description here

下面的代码:

final DatabaseReference userRef = FirebaseDatabase.getInstance().getReference().child("users"); 
userRef.orderByChild("email").equalTo("[email protected]").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

如果使用'addValueEventListener'而不是'addListenerForSingleValueEvent',是否会看到任何不同的行为? –

+0

@ JohnO'Reilly这很奇怪,使用'addValueEventListener'工程。但我想知道为什么? –

+1

我有时见过它返回缓存版本(你是否调用'setPersistenceEnabled(true)'?)。以下有更好的解释 - http://stackoverflow.com/questions/34486417/firebase-offline-capabilities-and-addlistenerforsinglevalueevent –

回答

1

如果setPersistenceEnabled(true)被调用时,使用的addListenerForSingleValueEvent可能会导致数据的本地缓存的版本将被返回,而不是最新版本从服务器(而呼叫addValueEventListener将确保您获得最新版本)。如果使用addListenerForSingleValueEvent的另一种方法是调用query.keepSynced(true);

+0

伟大的答案约翰。前一段我写了一个更广泛的解释。请参阅http://stackoverflow.com/questions/34486417/firebase-offline-capabilities-and-addlistenerforsinglevalueevent/34487195#34487195 –

相关问题