【发布时间】:2020-06-22 23:26:35
【问题描述】:
我在我的 Android 应用中使用 Firebase 实时数据库,并尝试使用 Firebase 的 .info/connected 位置来检查互联网访问,但我无法以可靠的方式使用它来检查连接状态。
根据docs,
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
即使列表是可见的,并且输出是正确的。
所以,我的问题是,我应该如何(或在哪里)检查连接状态,以便以一致且可靠的方式了解用户是否已连接,然后决定开始获取数据?
【问题讨论】:
-
您遇到了什么问题?文档很清楚如何查询该特殊位置。您必须找到一种方法,以符合您的应用程序架构和 UI 要求的方式将其应用到您的应用程序中。这是一系列相当广泛的决定。
-
日志输出对我来说看起来很正常。由于客户端连接到 Firebase 服务器需要几秒钟的时间,因此它首先使用
false触发.info/connected事件,然后在建立连接后使用true。这种行为有什么问题? -
@FrankVanPuffelen 我面临的问题是我需要查询位置以了解是否应该通知最终用户连接到网络,如果他们还没有这样做,但由于它在开始时触发
false,因此我无法在启动时检查它以了解状态。但是看到你的评论,我意识到它很自然地先给false,然后给true。因此,关于这一点,您对在检查然后查询位置以查看它是否已连接然后告诉用户他们是否离线之前进行某种延迟工作有什么建议。
标签: android firebase firebase-realtime-database