【问题标题】:Exxplicitly syncing of local Firestore cache with Server将本地 Firestore 缓存与服务器显式同步
【发布时间】:2021-05-20 16:55:57
【问题描述】:

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

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

【问题讨论】:

    标签: android firebase google-cloud-firestore


    【解决方案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);
        }
    });
    

    【讨论】:

    • 感谢 Alex,如何查询待处理状态的数量。
    • 请检查我更新的答案并告诉我它是否有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 2012-10-11
    • 2023-03-19
    • 2021-01-11
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多