2017-02-18 45 views
0

我有一个ValueEventListener,并且永远不会到达内部代码。我的应用正在进行身份验证,但我无法检索数据,我不确定我错过了什么。在下面的代码中,当我检查时,uid具有正确的值,并且数据路径(“Users/[uid]”)是正确的,但值事件侦听器中的内部代码永远都不会到达。我也尝试将一个侦听器放在根上,结果相同。ValueEventListener永远不会被输入

我已经使用菜单选项设置Firebase,将认证和实时数据库都添加到我的应用程序中;身份验证工作正常,所以我想知道是否有其他东西需要配置为实时数据库?我已经阅读了文档,并通过了很多例子,但我看不到任何我想念的东西。

uid = FirebaseAuth.getInstance().getCurrentUser().getUid().toString(); 
    DatabaseReference userRef = ref.child("Users").child(uid).getRef(); 

    ValueEventListener userListener = new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      User user = dataSnapshot.getValue(User.class); 
      if (user == null) { 
       SettingsLoad(); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.e("User", "User not found"); 
     } 
    }; 

    userRef.addListenerForSingleValueEvent(userListener); 
+0

请勿在'child()'之后调用'.getRef()'。这是不必要的,并会在某个时候导致问题(尽管这不是你目前问题的原因)。 Just:'DatabaseReference userRef = ref.child(“Users”)。child(uid);'。 –

回答

0

试试这个! 我刚刚添加了其他条件和日志或吐司的结果!

uid = FirebaseAuth.getInstance().getCurrentUser().getUid().toString(); 
     DatabaseReference userRef = ref.child("Users").child(uid).getRef(); 

    ValueEventListener userListener = new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      User user = dataSnapshot.getValue(User.class); 
      if (user == null) { 
       SettingsLoad(); 
      } 
**else { 
Log.d("tag","User Found!"); 
}** 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.e("User", "User not found"); 
     } 
    }; 

    userRef.addListenerForSingleValueEvent(userListener); 
相关问题