Firebase Listener 在空闲时间后无法识别或恢复连接

2023-11-21

我的项目是识别客户端是在线还是离线。我使用 Android-Firebase 文档中提供的代码,该代码使用“.info/connected”中的 EventListener。

// since I can connect from multiple devices, we store each connection instance separately
// any time that connectionsRef's value is null (i.e. has no children) I am offline
final FirebaseDatabase database = FirebaseDatabase.getInstance();
final DatabaseReference myConnectionsRef = database.getReference("users/joe/connections");

// stores the timestamp of my last disconnect (the last time I was seen online)
final DatabaseReference lastOnlineRef = database.getReference("/users/joe/lastOnline");

final DatabaseReference connectedRef = database.getReference(".info/connected");
connectedRef.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    boolean connected = snapshot.getValue(Boolean.class);
    if (connected) {
      DatabaseReference con = myConnectionsRef.push();

      // when this device disconnects, remove it
      con.onDisconnect().removeValue();

      // when I disconnect, update the last time I was seen online
      lastOnlineRef.onDisconnect().setValue(ServerValue.TIMESTAMP);

      // add this device to my connections list
      // this value could contain info about the device or a timestamp too
      con.setValue(Boolean.TRUE);
    }
  }

  @Override
  public void onCancelled(DatabaseError error) {
    System.err.println("Listener was cancelled at .info/connected");
  }
});

此方法可以正确识别用户何时终止或重新打开应用程序,或者何时在互联网上发生轻微的断开连接。但是,我做了一个测试,关闭设备的Wifi 2分钟,在Firebase数据库中识别出它未连接,但是当我打开Wifi,恢复互联网连接时,Firebase无法识别活动连接,看起来好像用户仍处于非活动状态。

这段代码片段被插入到我的 MainActivity 的 onCreate 方法中。

谁能告诉我为什么会出现这种情况?


EDIT: 附件

Step #1

Step #2

Step #3

错误日志:

11-14 10:12:55.272 27901-27926/com.example.davi.projetofirebase D/PersistentConnection: pc_0 - 尝试获取身份验证令牌

11-14 10:12:55.276 27901-27926/com.example.davi.projetofirebase D/PersistentConnection: pc_0 - 成功获取令牌,打开连接

11-14 10:12:55.281 27901-27926/com.example.davi.projetofirebase D/连接:conn_14 - 打开连接

11-14 10:12:55.293 27901-27926/com.example.davi.projetofirebase D/WebSocket: ws_14 - WebSocket 错误。 bkx:未知主机:s-usc1c-nss-208.firebaseio.com 在 bku.d(:com.google.android.gms.DynamiteModulesC@11746448:102) 在 bkv.run(:com.google.android.gms.DynamiteModulesC@11746448:4) 在 java.lang.Thread.run(Thread.java:760) 引起:java.net.UnknownHostException:s-usc1c-nss-208.firebaseio.com 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:174) 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356) 在 java.net.Socket.connect(Socket.java:586) 在 com.android.org.conscrypt.OpenSSLSocketImpl.connect(OpenSSLSocketImpl.java:265) 在 com.android.org.conscrypt.OpenSSLSocketImpl.connect(OpenSSLSocketImpl.java:252) 在 java.net.Socket.(Socket.java:427) 在 java.net.Socket.(Socket.java:210) 在 javax.net.ssl.SSLSocket.(SSLSocket.java:906) 在 com.android.org.conscrypt.OpenSSLSocketImpl.(OpenSSLSocketImpl.java:192) 在 com.android.org.conscrypt.OpenSSLSocketFactoryImpl.createSocket(OpenSSLSocketFactoryImpl.java:68) 在 bku.d(:com.google.android.gms.DynamiteModulesC@11746448:94) 在 bkv.run(:com.google.android.gms.DynamiteModulesC@11746448:4) 在 java.lang.Thread.run(Thread.java:760)

11-14 10:12:55.294 27901-27926/com.example.davi.projetofirebase D/WebSocket: ws_14 - 自行关闭

11-14 10:12:55.295 27901-27926/com.example.davi.projetofirebase D/连接:conn_14 - 实时连接失败

11-14 10:12:55.295 27901-27926/com.example.davi.projetofirebase D/连接:conn_14 - 关闭实时连接

11-14 10:12:55.295 27901-27926/com.example.davi.projetofirebase D/PersistentConnection:pc_0 - 由于其他原因断开连接

11-14 10:12:55.296 27901-27926/com.example.davi.projetofirebase D/PersistentConnection: pc_0 - 计划连接尝试

11-14 10:12:55.297 27901-27926/com.example.davi.projetofirebase D/ConnectionRetryHelper:安排在 27403ms 内重试

11-14 10:12:55.304 27901-27926/com.example.davi.projetofirebase D/WebSocket: ws_14 - 已关闭

11-14 10:13:02.947 27901-27926/com.example.davi.projetofirebase D/PersistentConnection:pc_0 - 连接中断:connection_idle

11-14 10:13:02.960 27901-27926/com.example.davi.projetofirebase D/ConnectionRetryHelper:取消现有重试尝试


我联系了 Firebase 支持团队,他们告诉我一个显然解决了我的问题的解决方案:

显然,如果数据库没有活动操作或侦听器,.info/connected 的侦听器将停止侦听。我向数据库中的任何一个节点添加了另一个辅助侦听器,并且它起作用了!

DatabaseReference myConnectionRef2 = database.getReference("/users/joe/lastOnline");
myConnectionRef2.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.getValue() == null) {
            System.out.println("FIREBASE: Aux connected");
        } else {
            System.out.println("FIREBASE: Aux not connected");
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

每次失去网络连接时,两个侦听器都会尝试恢复通信,直到网络重新连接。

感谢所有帮助我解决这个问题的人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase Listener 在空闲时间后无法识别或恢复连接 的相关文章

  • Android Studio磁盘空间不足如何解决?

    我随机收到此错误 并且不确定为什么 Android Studio 的磁盘空间变低 Android Studio 系统目录分区磁盘空间不足 Update 此应用程序安装在运行 10 10 1 的 Mac 上 具有 251GB 内部存储和占用
  • 如何在 android-studio 0.3.6 中运行 Gradle 1.9?

    我只是花了一些时间尝试将现有的 android studio 项目从 gradle 1 8 迁移到 gradle 1 9 Final 昨天发布 但失败了19th Nov 我在这里阅读了大多数其他与 gradle 相关的帖子 但没有一个对我有
  • 明文 HTTP 流量...不允许

    我的程序从用户那里获取一个 URL 因此它可以向互联网上的任何网站发出请求 我试图让这成为可能 我查找了有关 Android HTTP Cleartext 错误的所有答案 并做了这个 但它仍然不允许我连接我的测试本地 PHP 服务器 我在这
  • 注销时Firebase facebook按钮android身份验证

    我在我的 Android 应用程序中使用 firebase 并在 facebook SDK 中使用登录 我面临的唯一问题是 当我使用 facebook 登录然后注销时 facebook 登录按钮处于 注销 状态 当我单击它时 它会询问我是否
  • 使用时间戳查询 Firebase 数据

    这是我当前在 Firebase 上的数据设计 数据只是 事件 参考中的 json 列表 时间戳 操作和持续时间字段是固定的 以后可能会添加更多可选字段 backend 7f34e events KQ30Lc6lasdfasdfAi1URf
  • android studio 底部工具栏的“运行”选项卡消失了

    Android Studio 底部工具栏中曾经有一个 运行 选项卡 但该选项卡不再显示 怎么把它带回来 请检查下图以了解它消失之前的位置 Run 选项卡曾经位于 TODO 选项卡之前的红色圆圈中 查看 gt 工具窗口 gt 运行 Or us
  • 将 ArrayList 保存在捆绑包 savingInstanceState 中

    ArrayList 是在类级别定义的 这些是我保存的实例方法 Override protected void onSaveInstanceState Bundle outState super onSaveInstanceState out
  • 我可以使用“导入 com.facebook.FacebookSdk;”使用 Facebook SDK 3.23.1?

    在我的 app build gradle 文件中 我有compile com facebook android facebook android sdk 3 23 1 在我的 BaseActivity java 文件 其中有 public
  • 将搜索结果更新为 Android 中的 Lazy Adapter

    我有项目列表 想为其实现搜索功能 因此 我有一个带有 addTextChangedListener 的文本框 搜索结果运行良好 但当我尝试将结果设置为 ListView 时 新结果将附加到旧结果中 我正在使用惰性适配器 如何清除适配器中的旧
  • 如何使用 onSearchRequested() 调用搜索对话框

    我正在尝试实现搜索对话框 但无法显示活动中的搜索 我在清单文件中定义了主要活动 此活动向用户显示了他们必须从中选择的选项列表 选项之一是 搜索 选项
  • 如何使用asynctask显示倒计时的进度条?

    在我的应用程序中 我希望用户按下按钮 然后等待 5 分钟 我知道这听起来很糟糕 但就这样吧 5 分钟等待期间的剩余时间应显示在进度条中 我使用带有文本视图的 CountDownTimer 来倒计时 但我的老板想要看起来更好的东西 这就是进度
  • 使用 eclipse 配置mockito 时出现问题。给出错误:java.lang.verifyError

    当我将我的mockito库添加到类路径中 并使用一个简单的mockito示例进行测试时 我尝试使用模拟对象为函数add返回错误的值 我得到java lang verifyerror 以下是用于测试的代码 后面是 logcat Test pu
  • 我可以在主线程上读取一个小 txt 文件,还是应该始终避免那里的 I/O?

    我正在读取一个小的 json 文件 其中有几行 它存储在用户设备的内部应用程序文件夹中 我所做的就是这样 JSONObject jsonObject new JSONObject MyUtils inputStreamToString My
  • 从 AlertDialog 返回值

    我想构建一个函数来创建 AlertDialog 并返回用户输入的字符串 这是我用于创建对话框的函数 如何返回该值 String m Text private String openDialog String title AlertDialo
  • 在 Android SDK 中通过单击按钮更改背景颜色不起作用

    我有一个简单的程序 可以在单击按钮后更改背景颜色 但它不起作用 public class ChangeBackgroundActivity extends Activity Called when the activity is first
  • 在 TextView onTextChanged 上设置文本

    我有一个定义为类属性的文本视图 以便我可以在整个类中访问它 在 onCreate 方法中我执行以下操作 chars TextView findViewById R id chars chars setText 300 之后 public v
  • Exif 方向标签返回 0

    我正在开发一个自定义相机应用程序 我面临以下问题 当我尝试使用检索方向时ExifInterface 它总是返回 0 ORIENTATION UNDEFINED 这使我无法将图像旋转到正确的状态 从而无法正确显示 我使用示例代码来设置相机旋转
  • 使用 onAuthStateChanged 通过 Flutter 登录 Firebase

    在 Flutter 之外 当我实现 firebase 身份验证时 我总是使用 firebase 提供的 onAuthStateChanged 侦听器来确定用户是否登录并做出相应响应 我正在尝试使用 flutter 做类似的事情 但我可以找到
  • Firestore/Firebase 模拟器未运行

    我正在尝试使用此处列出的指南在本地测试我的功能https firebase google com docs functions local emulator https firebase google com docs functions
  • RecyclerView元素更新+异步网络调用

    我有一个按预期工作的回收视图 我的布局中有一个按钮可以填充列表 该按钮应该进行异步调用 根据结果 我更改按钮的外观 这一切都发生得很好 但是 当我单击按钮并快速向下滚动列表时 异步调用的结果会更新新视图的按钮 代替旧视图的视图 我该如何处理

随机推荐

  • T-SQL CASE 子句:如何指定 WHEN NULL

    我写了一个类似这样的T SQL语句 原来的看起来不同 但我想在这里给出一个简单的例子 SELECT first name CASE last name WHEN null THEN Max ELSE Peter END AS Name FR
  • 调整 XORShift 生成器以返回最大值内的数字

    我需要生成最大范围内的随机整数 自从性能至关重要 我决定使用 XORShift 生成器而不是 Java 的 Random 类 long seed System nanoTime seed seed lt lt 21 seed seed gt
  • 从版本 5.0.3 开始,在 mysql 表的小数字段中存储负数

    我的表中很少有带有小数类型金额列的字段 此列将包含存款金额 正值 或取款金额 负值 我将正值存储为 120 将负值存储为 50 我对该列求和并得到了预期的结果 Mysql版本是 5 1 33 community 当我检查有关十进制的 mys
  • 在 TextView 中使用 SpannableStringBuilder 的段落间距

    正如问题所示 我正在研究TextView这将使用显示格式化文本SpannableStringBuilder 它有多个段落 我想知道使用某些内置跨度设置段落之间的间距的最简单 或至少最不复杂 的方法是什么 这可能吗 或者我需要为此构建一个自定
  • 类型错误:__init__() 需要 3 个位置参数,但给出了 4 个

    这些是我的课程的代码 class Employee def init self name gender self name name self gender gender class Salary def jump self name sa
  • UTF-8 和 UTF-16 之间有很大区别吗

    我调用一个 Web 服务 它返回一个具有 UTF 8 编码的响应 xml 我用java检查了这一点getAllHeaders method 现在 在我的 java 代码中 我获取该响应 然后对其进行一些处理 然后 将其传递给不同的服务 现在
  • Visual Studio 2010 主题,更改参数帮助背景颜色

    最近我在 Visual Studio 2010 中安装了电动工具扩展它工作得很好 但是我的文本着色主题有问题 黄昏 以及扩展的彩色参数功能 由于主题文本前景色为灰色 当 Power Tools Extensions 使用我的文本颜色显示参数
  • Chrome 扩展程序弹出窗口中单击时的 JavaScript 警报立即消失

    我正在开发一个 Chrome 扩展程序 并希望在用户单击某些元素时使用 Prompt 获取用户的输入 不幸的是 由于某种原因 当作为 onclick 或在 jQuery something click function 中调用时 我无法让p
  • 使用 JavaScript 使用 HmacSHA256 正确签署字符串

    在用于身份验证的 Houndify API 文档中 您有以下内容块 验证请求的示例 假设我们有以下信息 UserID ae06fcd3 6447 4356 afaa 813aa4f2ba41 RequestID 70aa7c25 c74f
  • 使用 DLR 运行使用 CompileAssemblyFromSource 生成的代码?

    对此进行后续跟进很好的答案 我想知道 DLR 是否使用dynamic关键字可以允许以不太冗长的方式为生成的程序集编写代码 例如 上述答案的代码可以 using Microsoft CSharp CSharpCodeProvider foo
  • Pytorch - 在 softmax 层之后选择最佳概率

    我有一个使用 Pytorch 0 4 0 的逻辑回归模型 其中我的输入是高维的 我的输出必须是标量 0 1 or 2 我使用线性层与 softmax 层相结合来返回n x 3张量 其中每列表示输入属于三个类别之一的概率 0 1 or 2 但
  • 运行基于 OpenMPI 的库时出错

    我已经从 Ubuntu 中可用的标准 apt get install 安装了 openmpi 库 我运行一个调用 MPI 库的 python 代码 我收到以下错误 任何想法错误的根源是什么 是 OpenMPI 配置错误吗 如何解决这个问题
  • 如何查看WTForms验证错误?

    我正在编写一些基本测试 但测试失败了 def test new user registration self self client get user register form RegistrationForm email u email
  • fopen:无法打开流:Mac 上的 PHP 中的权限被拒绝 [重复]

    这个问题在这里已经有答案了 我写了这段代码 if file exists testfile rtf echo file exists else echo file doesn t exist fh fopen testfile rtf w
  • 如何在 Swift 中写入 Google Sheets

    我正在尝试通过以下方式写入 Google Sheets 文档这个谷歌API 但我没有取得太大成功 我什至不确定我是否遵循了正确的 api 因为它显示 Appscript 并且看起来像 Swift 我已经能够使用以下方法从工作表中读取数据 p
  • 当工作线程工作时,UI 变得不稳定

    我有一个手写识别应用程序 用户用手指绘画 该应用程序识别字符 识别引擎在具有尽可能低优先级的工作线程中运行 Thread MIN PRIORITY 它是纯粹的CPU 内存算法 没有任何I O 不过 当线程正在积极工作时 用户界面会变得相当不
  • 人类可读的 type_info.name() [重复]

    这个问题在这里已经有答案了 我编译了以下代码g 并得到输出 该输出写在注释中 template
  • Laravel 4 - 没有可用的猜测者问题

    我收到此错误 LogicException 无法猜测 mime 类型 因为没有可用的猜测器 您启用了 php fileinfo 扩展吗 我已经启用了 php fileinfo 扩展并重新启动了 Wamp Web 服务器 但我仍然无法解决这个
  • AsyncTask Android 示例

    我正在读关于AsyncTask 我尝试了下面的简单程序 但这似乎不起作用 我怎样才能让它发挥作用 public class AsyncTaskActivity extends Activity Button btn Called when
  • Firebase Listener 在空闲时间后无法识别或恢复连接

    我的项目是识别客户端是在线还是离线 我使用 Android Firebase 文档中提供的代码 该代码使用 info connected 中的 EventListener since I can connect from multiple