显式同步本地 Firestore 缓存与服务器

时间:2021-05-20 16:55:57

标签: android firebase google-cloud-firestore

我正在使用 Firestore DB,需要知道有什么方法可以将数据从本地缓存显式同步到服务器。因为我可以看到一些时间文件快照。 metadata.HasPendingWrite() 为真。

有没有办法获取待处理的文档计数或从待处理的文档中获取这些文档?

1 个答案:

答案 0 :(得分:1)

根据关于 Firestore offline persistence 的官方文档:

<块引用>

对于 Android 和 iOS,默认启用离线持久化。

这意味着离线时,尚未同步到服务器的待处理写入将保留在本地缓存的队列中。这也意味着:

metadata.hasPendingWrite() 

将返回“true”,因为所有这些写入都处于“待处理”状态。一旦设备恢复连接,队列中的所有内容都会与 Firebase 服务器同步,反之亦然。

<块引用>

我正在使用 Firestore DB,需要知道有什么方法可以将数据从本地缓存显式同步到服务器。

没有必要明确地做某事。 Firestore 会自动为您执行此操作。

<块引用>

有什么方法可以获取待处理的文档计数或从待处理的文档中获取这些文档吗?

是的,您可以创建查询,并只计算处于“待处理”状态的文档。基本上是尚未与 Firebase 服务器同步的文档。

编辑:

假设您有一个产品集合,并且想要获取处于“待处理”状态的文档数量,请使用以下代码行:

productsRef.addSnapshotListener(new EventListener<QuerySnapshot>() {
    @Override
    public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException e) {
        if (e != null) {
            Log.w(TAG, "Listen failed.", e);
            return;
        }

        int count = 0;
        for (QueryDocumentSnapshot doc : value) {
            if (doc.getMetadata().hasPendingWrites()) {
                count++;
            }
        }
        Log.d(TAG, "count: "+ count);
    }
});