我正在使用 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 上的有效操作,因此这就是任务成功完成的原因。
您可以通过以下方式检测结果是否来自本地缓存与直接来自服务器检查元数据 https://firebase.google.com/docs/reference/android/com/google/firebase/firestore/QuerySnapshot.html#getMetadata(): querySnapshot.getMetadata().isFromCache()
。来自文档:
true
如果快照是从缓存数据创建的,而不是保证最新的服务器数据。如果您的听众选择了元数据更新(通过MetadataChanges.INCLUDE
)您将收到另一张快照isFomCache()
一旦客户端从后端收到最新数据,则等于 false。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)