我正在使用带有Android SDK(11.6.2)的Firestore,当我的设备离线并重新连接到Internet时,我遇到异常 .
请求文档时,firestore失败并出现以下任务异常:
com.google.firebase.firestore.FirebaseFirestoreException:由于客户端处于脱机状态,因此无法获取文档 .
但是,设备已连接,我可以在使用Firestore旁边发出网络请求并成功 . 此错误不一致,有时请求会在重新连接到Internet后立即成功 . 有时,请求会一次又一次地失败,然后成功,有时在设备重新连接到Internet后超过一分钟 .
以下是产生异常的示例请求:
val docRef = firestore.collection("foo").document("bar")
docRef.get().addOnCompleteListener { task ->
if (task.isSuccessful) {
Log.d("FirestoreSourceSet", "Get document success")
} else {
Log.e("FirestoreSourceSet", "Get document error", task.exception)
}
}
我没有使用Firestore的脱机功能,因此第一次使用 setPersistenceEnabled(false)
标志初始化FirebaseFirestore实例:
val firestoreSettings = FirebaseFirestoreSettings.Builder()
.setPersistenceEnabled(false)
.build()
val firestore = FirebaseFirestore.getInstance().apply {
this.firestoreSettings = firestoreSettings
}
为什么即使设备在线,Firestore也会返回此错误?我是否遗漏了Firestore配置中可以避免此错误的内容?
我尝试将Firebase升级到11.8.0版本,但我遇到了相同的行为 .
日志
这些是尝试在离开飞行模式后使用Firestore(以文档提取开始)同步某些数据时的日志:https://pastebin.com/xDMG2Pzj
在第一次Firestore呼叫之前,网络已经可用,因为我等待Wifi结算,并在继续使用Firestore之前使用Android的ConnectivityManager进行检查 .
多次调用是因为每次出现错误时我都会使用按钮手动重试,直到成功检索到文档 .
日志的第一行是当我将飞机模式设置为1时关闭Firestore流 .
编辑:问题
Firebase没有公共跟踪器,但我使用their report tool和made a repo that reproduces the issue报告了此问题 .
他们承认这个问题,但无法提供ETA,所以我们必须等待:
如果我们发布修复程序,我们将在发布说明页面中公布 .
这仍然是firestore-core 17.0.4的一个问题
1 回答
来自official documentation:
初始化Cloud Firestore时,可以启用或禁用脱机持久性 . 因此,使用以下代码行时:
您实际上将持久性设置为
false
,您正在禁用此功能 . 要解决此问题,只需删除此行代码即可 . Firestore默认为.setPersistenceEnabled(true)
.