我将一个int上传到firebase。如果第一次尝试后上传仍未完成,则应在短时间内(几秒钟)取消上传。
现在是这种情况,当您上载值但没有互联网连接时,它会等到连接再次起作用并上载该值。例如,可以在30分钟后。
问题在于,对于我而言,此上传值已经过时了。 如果第一次尝试后上传未完成,我需要取消上传。我该怎么办?
mDatabase = FirebaseDatabase.getInstance().getReference().child("Survey").child("Solution1").child("Result");
mDatabase.setValue(i1);
答案 0 :(得分:1)
您不能取消对实时数据库的写入。相反,您可以做的就是简单地将先前的值重写到同一位置。如果您不知道先前的值,那么您就很困惑,您必须接受您写入的值最终将被同步。
您也许以后可以尝试在Cloud Functions触发器中撤消写操作,但是您将不得不仅使用提供给触发器的信息来找出该值在什么时候过时了。
答案 1 :(得分:0)
如Doug所说,一旦写入队列,就无法取消它。
我可以想到两种方式来实现(或至少近似)您的用例:
.info/connected
节点使用一个附加的侦听器,如detecting connection state上的文档所示。只需拥有一个顶级侦听器,然后在调用setValue()
之前检查最新的值。FirebaseDatabase.getInstance().purgeOutstandingWrites()
清除所有未决的写入。因此,您可以在致电setValue()
之前先致电。或者:考虑让多个写入通过。服务器通常会快速连续地处理它们,甚至可能不会将过时的消息发送给客户端。