Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按时间间隔管理Firestore数据库中文档的脱机更新状态_Java_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

Java 如何按时间间隔管理Firestore数据库中文档的脱机更新状态

Java 如何按时间间隔管理Firestore数据库中文档的脱机更新状态,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我创建了一个应用程序,其中使用了Firestore数据库。 现在我的任务是,用户可以在一定时间内执行更新文档的操作。 我的意思是,如果用户试图在联机模式下更新,那么就没有问题了 但如果用户设备存在网络连接不良的连接问题,则应在20秒内触发此更新操作,以在Firestore服务器上保存。 如果用户不能在持续时间内完成操作,那么最后一个操作应该被推出,我的意思是缓存操作不应该在20秒后被推送 对于脱机模式限制,我设置了 setPersistenceEnabled(false)但仍在发送文档更新,这与

我创建了一个应用程序,其中使用了Firestore数据库。 现在我的任务是,用户可以在一定时间内执行更新文档的操作。
我的意思是,如果用户试图在联机模式下更新,那么就没有问题了 但如果用户设备存在网络连接不良的连接问题,则应在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对于脱机保存数据非常有用。但在我的案例中,它会一个接一个地向多个用户发送一个请求,如果用户没有随着时间的推移声明该操作,那么我们需要忽略该操作