我正在使用 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 (viaMetadataChanges.INCLUDE
) you will receive another snapshot withisFomCache()
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/