【问题标题】:Firestore offline write eventsFirestore 离线写入事件
【发布时间】:2020-01-13 17:59:25
【问题描述】:

Firestore 仅调用 onComplete 等事件在线。如何知道写状态离线

 db.collection("col").document(id).set(obj)
                .addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()) {
                          //Ok finish activity <----
                            finish();
                        } else {
                            Toast toast = Toast.makeText(getApplicationContext(),
                                    "Error try again", Toast.LENGTH_SHORT);
                            toast.show();
                        }
                    }
                });

上面的代码不能离线工作,我可以写多次。在我连接到互联网之前,不会调用 onComplete。我是否实现了此功能(成功时关闭活动)。

【问题讨论】:

标签: java android google-cloud-firestore


【解决方案1】:

在我连接到互联网之前不会调用 onComplete。

这是正常行为。 OnCompleteListener 仅在数据已被 Firebase 服务器写入或拒绝时调用。

侦听器永远不会为本地写入操作而触发。如果本地写入操作失败,客户端将引发常规异常。 Firestore 客户端旨在即使离线也能继续工作。所以离线写一些数据到数据库是永远不会出错的。

我如何实现此功能(成功时关闭活动)。

您无法添加完成侦听器来了解数据何时写入缓存,这是因为此操作会立即发生。在这种情况下,您无需担心。

在这种情况下,您可以检查互联网连接。如果您处于离线状态,则意味着所有数据都已添加到本地缓存中。

【讨论】:

    【解决方案2】:

    离线写入被认为是立即写入。没有完成状态。

    您会注意到,如果您为正在编写的文档设置了侦听器,则该侦听器将在离线时立即触发,并使用更新的文档值。您可以从传递给侦听器的文档快照中判断写入是否已完成。如果你打电话给snapshot.getMetadata().hasPendingWrites(),它会告诉你更新的文档是否真的已经发送了。这是您可以获得的有关离线写入状态的最佳信息。

    【讨论】:

      猜你喜欢
      • 2021-07-30
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 2019-10-29
      • 2018-10-31
      • 1970-01-01
      相关资源
      最近更新 更多