我在强制从 Firebase 实时数据库读取值时遇到问题。我的申请流程:
SplashActivity->LoginActivity->MainActivity。当用户登录时,SplashActivity 和 LoginActivity 不存在。当用户注销时,主 Activity 完成并再次创建 LoginActivity。
在 MainActivity onCreate
事件中,从 Firebase 检索感兴趣的数据:
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("appVariant");
myRef.child("stable").addListenerForSingleValueEvent(new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
AppVariant v = dataSnapshot.getValue(AppVariant.class);
Log.d(BuildConfig.APPLICATION_ID, String.format("Data change: %s", v.toString()));
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
它工作正常,但仅限于第一次创建 MainActivity
时。如果我注销(MainActivity 完成),然后再次登录(重新创建 MainActivity),onDataChanged
永远不会再次触发。
如何在不重新启动应用程序的情况下强制再次获取子值?我需要在用户每次登录后按需检索数据一次(不需要监视任何更改)。这可能吗?
最佳答案
这不是身份验证过程的正常流程。如果您有两个不同的 Activity (让我们忽略 SplashActivity),例如 LoginActivity
和 MainActivity
,您应该考虑执行以下操作:
- 将您的 LoginActivity 设置为您的应用程序在
AndroidManifest.xml
文件中启动的默认 Activity - 将 MainActivity 添加为另一个 Activity
- 在 LoginActivity 中添加身份验证逻辑。
- 在 LoginActivity 中创建一个
authStateListener
来检查用户身份验证的状态。如果firebaseUser != null
则将用户重定向到 MainActivity。 - 还在 MainActivity 中创建一个
authStateListener
以检查用户身份验证的状态。如果firebaseUser == null
则将用户重定向到 LoginActivity。
通过身份验证后,您可以使用监听器,而不必担心您的 Activity 将重新启动。
就是这样。为了更好地理解,如果你有时间,看看我的一篇tutorials我已经一步步解释了使用两种不同 Activity 的所有身份验证过程。
关于java - Firebase数据库-强制按需读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48765608/