Firebase Firestore如何识别离线读取

DAA*_*DAA 1 android kotlin firebase 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()
            }
        }
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 6

如果您处于离线状态,客户端将首先尝试连接。一旦确定无法连接,它将尝试get()基于本地数据库中的数据来完成。这是对Firestore的有效操作,所以这就是任务成功完成的原因。

您可以检测,如果结果从VS里面传来直接从服务器上,通过本地缓存来检查元数据querySnapshot.getMetadata().isFromCache()。从文档:

true如果快照是从缓存的数据而不是有保证的最新服务器数据创建的。如果您的监听器(通过MetadataChanges.INCLUDE)选择了元数据更新isFomCache(),则一旦客户端从后端接收到最新数据,您将收到另一个等于false的快照。