当前位置: 首页 > 知识库问答 >
问题:

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

滑令
2023-03-14

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

喷溅活动-

在MainActivityonCreate事件中,要从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将不再触发。

如何强制再次获得子值,而不重启应用程序?我需要按需检索数据,每次用户登录后,一次(不需要监控任何变化)。那有可能吗?

共有1个答案

危彬彬
2023-03-14

这不是身份验证过程的正常流程。如果你有两个不同的活动(让我们省略溅射行为),比如<代码> LogiActudio和 MaultActudio,你应该考虑做以下操作:

  1. 将LoginActivity设置为应用程序在AndroidManifest中启动的默认活动。xml文件
  2. 将主活动添加为另一个活动
  3. 在LoginActivity中添加身份验证逻辑
  4. 在LoginActivity中创建一个authStateListener,以检查用户身份验证的状态。如果firebaseUser!=空然后将用户重定向到MainActivity
  5. 也在MainActivity中创建一个authStateListener,以检查用户身份验证的状态。如果firebaseUser==null,则将用户重定向到LoginActivity

一旦您通过身份验证,就可以使用侦听器,而不用担心活动将重新启动。

就这样。为了更好地理解,如果您有时间,请阅读我的一篇教程,其中我已逐步解释了使用两种不同活动的所有身份验证过程。

 类似资料:
  • 我试图从Firebase数据库中读取数据,我已经到处阅读和查找,但我已经走到了死胡同。 这就是我所做的一切。 依赖项: 实现'com.google.firebase: Firebase存储: 9.2.1' 实现'com。谷歌。firebase:firebase数据库:9.2。1' 实现'com。谷歌。firebase:firebase授权:9.2。1' 实现'com。谷歌。火基:火基核心:9.2。

  • 我已经花了几个小时阅读产品分支中的0和1。请在Firebase数据库有经验的人帮助我:(

  • 因此,我尝试拍摄数据库的快照,并添加带有子项的数组字符串中的项。 我的set和get java文件如下所示 但是,当我的程序到达dataQuery方法并尝试获取和设置名称和成分时,它会崩溃。有人能解释一下我做错了什么,以及是否有更好的方法来使用数据库快照来做到这一点吗? 进程:in.tvac.akshayejh.firebasesearch,PID:24798java.lang.NullPoint

  • 主要内容:示例在本章中,我们将演示如何读取Firebase数据。 下图显示了想要读取的数据 - 可以使用方法来检索数据。 此方法将事件类型作为“值”,然后检索数据的快照。 当我们将方法添加到快照时,将获得数据的JavaScript表示形式。 示例 下面来看看一个例子。 如果运行下面的代码,浏览器的控制台将显示以下数据。 在下一章中,我们将学习可用于读取数据的其他事件类型。

  • 我正在一个聊天应用程序,其中消息存储在firebase实时数据库。现在,如果我创建一个如下所示的节点(Chats-Better-A-ID和-B-ID是自动生成的聊天室密钥),那么我想知道当用户S在聊天应用程序中打开与用户T聊天时,so数据库将只读取存储在Chats-Better-S-T-ID中的消息,而不会读取其他聊天室消息!?我说的对吗?如果是,那么它会降低定价吗? 或 如果我存储如下所示的数据

  • 问题内容: 当我尝试从数据库中读取数据时,至少使用 抛出异常表示不存在事务。 当我添加注释时: 它工作正常。 但是,由于读取和访问数据每秒将发生百万次,因此我想确保不会不必要地阻塞我们的环境。 如果不是,创建只读事务的成本是多少? 我不能在没有事务的情况下结合Spring创建Hibernate Criteria Query吗? 问题答案: 所有数据库语句都在物理事务的上下文中执行,即使我们没有显式