android - 如何以正确的方式使用 Firebase 的“.info/connected”位置来检查互联网访问?
问题描述
我在我的 Android 应用程序中使用 Firebase 实时数据库,并尝试使用Firebase 的 .info/connected
位置来检查互联网访问,但我无法以可靠的方式使用它来检查连接状态。
根据文档,
Firebase 实时数据库提供了一个特殊位置,
/.info/connected
每次 Firebase 实时数据库客户端的连接状态发生变化时,该位置都会更新。
例如,我的RecyclerView
主应用程序屏幕中有一个依赖于从RTDB获取的数据,就像这样
// Fragment
sellerRV = binding.sellerInfoRecyclerView
val adapter = SellerRecyclerViewAdapter()
sellerViewModel.initLoadingBalanceData()
// I am not doing anything after knowing about the connection state, just checking where I should call it
sellerViewModel.checkFBConnectivity()
sellerViewModel.repoBalanceDataListener.observe(viewLifecycleOwner, Observer {
adapter.submitList(sellerBalanceList)
sellerRV.adapter = adapter
})
在显示的位置检查连接状态(可能是天真的)并运行应用程序后,Log
看起来像这样
2020-06-22 00:28:30.843 10092-10092/com.example.paylater D/firebaseRepo: not connected
2020-06-22 00:28:33.032 10092-10092/com.example.paylater D/firebaseRepo: connected
即使列表是可见的,并且输出是正确的。
所以,我的问题是,我应该如何(或在哪里)检查连接状态,以便以一致且可靠的方式了解用户是否已连接,然后决定开始获取数据?
解决方案
由于客户端连接到 Firebase 服务器需要几秒钟的时间,因此它首先会触发一个.info/connected
事件,false
然后true
一旦建立连接就会触发一个事件。
应用程序将其可视化给用户的通常方式是在启动时显示“正在连接...”消息或动画,然后稍等片刻。如果建立了连接(因此侦听器变为true
),则它们会删除该消息。如果经过一定的时间间隔,它们会显示“这比预期花费的时间更长,请检查您的互联网连接”类型的消息。
推荐阅读
- reactjs - 如果用户单击重新加载,如何在 React 中使用 window.onbeforeunload 来显示重新加载的弹出窗口
- jwt - Azure 用户属性是 JWT 声明吗?
- spring-boot - 使用类路径在 spring-mybatis 中配置映射器位置:*
- java - 如何通过 Jmeter 中的 jmeterproperty 传递双精度值
- java - 如何绕过 Spring Boot 应用程序的组织代理
- python - 如何替换满足条件的列中的值?
- python - 如何从 pyjet 导入编译而不会出现编译错误?
- powershell - Powershell 错误提示库不可用稍后再试
- python - 在 SQL 中存储 struct_time
- java - 如果数据库中没有数据,则 REST API java 类设置 setter getter 的初始值