Firebase数据库 - 按需强制读取值

时间:2018-02-13 11:19:09

标签: java android firebase firebase-realtime-database

我遇到了从Firebase Realtime数据库强制读取值的问题。我的申请流程:

SplashActivity-> LoginActivity-> MainActivity。记录用户时,SplashActivity和LoginActivity不存在。当用户注销时,主活动完成并再次创建LoginActivity。

在MainActivity var xmlString = @"<person xmlns-json='http://james.newtonking.com/projects/json' id='1'><name>Alan</name><url>http://www.google.com</url><role json-Array='true'>Admin</role></person>"; var xml = new XmlDocument(); xml.LoadXml(xmlString); var json = JsonConvert.SerializeXmlNode(xml); var xmlDeserialized = JsonConvert.DeserializeXmlNode(json); xmlDeserialized.Should().NotBeNull(); xmlDeserialized.ShouldBeEquivalentTo(xml); //All good 事件中,要从Firebase检索有趣的数据:

onCreate

它工作正常,但只是第一次创建 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永远不会再次触发。

如何强制再次获取子值,而无需重新启动应用程序?每次用户登录后,我都需要按需检索数据一次(不需要监视任何更改)。这可能吗?

1 个答案:

答案 0 :(得分:1)

这不是身份验证过程的正常流程。如果您有两个不同的活动(让我们省略SplashActivity),例如LoginActivityMainActivity,您应该考虑执行以下操作:

  1. 制作您的LoginActivity,作为您的应用程序在AndroidManifest.xml文件中启动的默认活动
  2. 将MainActivity添加为另一个活动
  3. 在LoginActivity中添加身份验证逻辑。
  4. 在LoginActivity中创建authStateListener以检查用户身份验证的状态。如果firebaseUser != null,则将用户重定向到MainActivity。
  5. 还在MainActivity中创建authStateListener以检查用户身份验证的状态。如果firebaseUser == null,则将用户重定向到LoginActivity。
  6. 通过身份验证后,您可以使用侦听器而不必担心您的活动会重新启动。

    就是这样。为了更好地理解,如果您有时间,请查看我已逐步解释的tutorials之一,所有身份验证过程都使用两种不同的活动。