我正在使用FielBaseFixStand,我面临的问题是读操作: 我使用onCompleteListener,在其中,如果操作成功与否,我将调用不同的回调。 问题是,如果存在网络问题,将调用onCompleteListener,但task.issueccessfull返回true!!所以我得到了一个空结果,这和真正的空结果是分不开的。有没有办法区分网络问题和空读取?
非常感谢你!我的功能如下:
dataBase.collection(COLLECTION) .whereEqualTo(FIELD, searched) .get() .addOnCompleteListener { task: Task<QuerySnapshot> -> if (task.isSuccessful) { listenerSuccess(task.result) } else { listenerError() } }
如果您脱机,客户端将首先尝试连接。一旦发现无法连接,它将尝试完成 get() 基于本地数据库中的数据。这是FixSt店中的一个有效的操作,这就是任务成功完成的原因。
get()
通过 checking the metadata : querySnapshot.getMetadata().isFromCache() . 从文档中:
querySnapshot.getMetadata().isFromCache()
true 如果快照是从缓存的数据而不是保证的最新服务器数据创建的。如果您的侦听器已经选择了元数据更新(通过 MetadataChanges.INCLUDE )您将收到另一个快照 isFomCache() 当客户端从后端接收到最新数据时,等于false。
true
MetadataChanges.INCLUDE
isFomCache()