【发布时间】:2016-05-29 19:10:40
【问题描述】:
我正在使用 Firebase Api 9.+ 编写一个 Android 应用程序。
我使用 Firebase 身份验证和数据库。
当我访问我的应用程序并登录时,一切正常,并且 valueEventListeners 可以正确检索数据。
当我在一段时间后访问我的应用并且它已经登录时,我的问题就开始了。
身份验证似乎已得到确认,但我的任何侦听器都没有被触发,并且似乎没有任何内容被检索到。
要让我的应用程序再次正常工作,我必须退出并重新登录。
我不知道这是“会话过期”问题还是我忘记写在代码中的问题。
这是我的 valueEventListener 之一:
DatabaseReference myFirebase = FirebaseDatabase.getInstance().getReference();
hairDresserFirebase = myFirebase.getReference("hairDressers");
hairDresserFirebase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()){
HairDresser hd = snapshot.getValue(HairDresser.class);
if (hairDresserList.contains(hd)) hairDresserList.remove(hd);
hairDresserList.add(hd);
}
mRecyclerView.getAdapter().notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
其他变化仅供参考。
它们都在不同片段的onCreateView()方法中。
这是在我的启动活动的 onCreate() 方法中执行的代码,用于验证用户是否已经登录:
mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user == null) return;
authenticated = true;
}
};
虽然我的登录活动仅在用户未登录并执行完整的正确程序以使用电子邮件和密码或使用 Facebook 登录时才会启动,但它工作正常。
我没有找到任何解决此问题的方法,我不想强迫我的用户每次打开我的应用程序时都重新进行身份验证。
请帮帮我:)
【问题讨论】:
-
1. 能否请您添加 myFirebase 参考的减速? 2. 您是否调试过应用程序?您确定没有调用 onDataChange 和 onCancelled 吗?我建议在每个方法和每个 if 语句中添加 Log print,以便准确查看调用的内容和未调用的内容。
-
1.我添加了声明。 2. 是的,我不止一次在各处添加了日志,但没有打印任何内容。
-
我在使用 firebase:9.0.2 的电子邮件/密码身份验证时遇到了同样的问题。
-
这个错误的任何解决方案?
标签: android firebase firebase-realtime-database firebase-authentication