Java 如何按时间间隔管理Firestore数据库中文档的脱机更新状态
我创建了一个应用程序,其中使用了Firestore数据库。 现在我的任务是,用户可以在一定时间内执行更新文档的操作。Java 如何按时间间隔管理Firestore数据库中文档的脱机更新状态,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我创建了一个应用程序,其中使用了Firestore数据库。 现在我的任务是,用户可以在一定时间内执行更新文档的操作。 我的意思是,如果用户试图在联机模式下更新,那么就没有问题了 但如果用户设备存在网络连接不良的连接问题,则应在20秒内触发此更新操作,以在Firestore服务器上保存。 如果用户不能在持续时间内完成操作,那么最后一个操作应该被推出,我的意思是缓存操作不应该在20秒后被推送 对于脱机模式限制,我设置了 setPersistenceEnabled(false)但仍在发送文档更新,这与
我的意思是,如果用户试图在联机模式下更新,那么就没有问题了 但如果用户设备存在网络连接不良的连接问题,则应在20秒内触发此更新操作,以在Firestore服务器上保存。 如果用户不能在持续时间内完成操作,那么最后一个操作应该被推出,我的意思是缓存操作不应该在20秒后被推送 对于脱机模式限制,我设置了 setPersistenceEnabled(false)但仍在发送文档更新,这与网络连接有关 在实时数据库中,有一种方法可以找到设备连接 在Firestore有什么办法吗?
我已尝试禁用/启用网络模式,但这无助于解决此问题
https://cloud.google.com/firestore/docs/manage-data/enable-offline#kotlin+ktxandroid_4 db.disableNetwork
db.enableNetwork
我需要Android中的这种功能
我已尝试使用此代码来清除正在进行的请求
val hashMap = HashMap<String, Any>()
hashMap["status"] = "ACCEPTED"
hashMap["time"] = time
app().firestoreDB
.collection("doc")
.document("id")
.update(hashMap)
.addOnSuccessListener {
isStoredOnServer = true
// my action
}
object : CountDownTimer(20000, 1000) {
override fun onTick(millisUntilFinished: Long) {
if(isStoredOnServer){
this.cancel()
}
}
override fun onFinish() {
if(!isStoredOnServer) {
FirebaseFirestore.getInstance().clearPersistence()
.addOnFailureListener { e -> Log.d("Firestore", "Error persistence writing document $e") }
.addOnSuccessListener { Log.d("Could enable persistence:") }
}
}
}.start()
val hashMap=hashMap()
hashMap[“状态”]=“已接受”
hashMap[“时间”]=时间
app().firestoreDB
.收款(“单据”)
.文件(“id”)
.update(hashMap)
.addOnSuccessListener{
isStoredOnServer=true
//我的行动
}
对象:倒计时(20000,1000){
覆盖趣味点击(毫秒直到完成:长){
如果(isStoredOnServer){
这个。取消()
}
}
重写函数onFinish(){
如果(!isStoredOnServer){
FirebaseFirestore.getInstance().clearPersistence()
.addOnFailureListener{e->Log.d(“Firestore”,“错误持久性写入文档$e”)}
.addOnSuccessListener{Log.d(“可以启用持久性:”)}
}
}
}.start()
但如果用户设备存在网络连接不良的连接问题,则应在20秒内触发此更新操作,以在Firestore服务器上保存。如果用户不能在持续时间内完成操作,那么应该推出最后一个操作,我的意思是缓存操作不应该在20秒后推出
恕我直言,我看不出实施这种机制有什么好处,因为Firestore有自己的离线持久性机制。根据报告:
云Firestore支持离线数据持久性。此功能缓存应用程序正在使用的云Firestore数据的副本,以便应用程序可以在设备脱机时访问数据
因此,脱机时,您可以继续使用该应用程序。此外,对于Android和iOS,默认情况下会启用脱机持久性。使用:
setPersistenceEnabled(false)
这意味着将PersistenceEnabled
选项设置为false,意味着禁用整个持久性功能
在实时数据库中,有一种方法可以找到设备连接
对于CloudFireStore,同样的规则也适用
在Firestore有什么办法吗
只需删除上面的代码行,即可保持脱机持久性。有关更多信息,请参阅我在以下帖子中的答案:
谢谢你的建议,但我需要在特定的时间采取行动。这就是我限制PersistenceEnabled的原因。仍然处于连接不良状态几秒钟后保存我的任务是,如果时间已过,我需要在短时间内执行此操作,然后不需要在firebase服务器上发送此信息我已确认用户列表,因此如果有任何方法检查在线模式,如实时数据库,则建议meStill处于连接不良状态几秒钟后保存是,如果连接不良,数据将保存在缓存中,一旦恢复连接,所有内容都将保存在云中。即使您需要一些时间或没有时间,也应该启用缓存,并选择直接在客户端上存储或不存储什么。我想可能也有帮助。PersistenceEnabled对于脱机保存数据非常有用。但在我的案例中,它会一个接一个地向多个用户发送一个请求,如果用户没有随着时间的推移声明该操作,那么我们需要忽略该操作