android - Firebase Firestore 如何识别离线读取

标签 android firebase kotlin google-cloud-firestore

我正在使用 Firebase Firestore,我遇到了读取操作的问题: 我使用 onCompleteListener,在里面,如果操作成功与否,我会调用不同的回调。 问题是,如果出现网络问题,调用 onCompleteListener,但 task.isSuccessfull 返回 true!!所以我得到一个空结果,我无法将其与真正的空结果区分开来。有什么方法可以区分网络问题和空读吗?

非常感谢!我的功能如下:

dataBase.collection(COLLECTION)
        .whereEqualTo(FIELD, searched)
        .get()
        .addOnCompleteListener { task: Task<QuerySnapshot> ->
            if (task.isSuccessful) {
                listenerSuccess(task.result)
            } else {
                listenerError()
            }
        }

最佳答案

如果您处于离线状态,客户端将首先尝试连接。一旦发现无法连接,它会尝试根据本地数据库中的数据完成get()。这是对 Firestore 的有效操作,因此任务成功完成。

您可以通过 checking the metadata 检测结果是来自本地缓存还是直接来自服务器: querySnapshot.getMetadata().isFromCache()。来自文档:

true if the snapshot was created from cached data rather than guaranteed up-to-date server data. If your listener has opted into metadata updates (via MetadataChanges.INCLUDE) you will receive another snapshot with isFomCache() equal to false once the client has received up-to-date data from the backend.

关于android - Firebase Firestore 如何识别离线读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50917833/

相关文章:

firebase - FLUTTER:如何在流构建器中使用导航器?

java - Java 中的按钮/图像及其定位(android 应用程序)问题

android - 如何从 Android 设备获取默认的 HTTP USER AGENT?

javascript - 使用 firebase 的应用程序/无应用程序错误

javascript - 我可以从 img 标签将图像上传到 firebase 存储吗

kotlin - 如何只显示错误而不显示调用堆栈跟踪?

android - 在 Kotlin 中使用 safeArgs 进行导航抛出和错误

android - Kotlin:如何使用 Anko DSL 制作工具栏菜单?

android - 创建的 Smack Cache Executor 线程过多

Android模拟器网络配置