【问题标题】:manually set Firebase Firestore cache手动设置 Firebase Firestore 缓存
【发布时间】:2020-02-21 10:49:47
【问题描述】:

我正在为我的问题寻找解决方案,我有一个聊天应用程序,它将所有用户的通信显示为 Recyclerview 监听器,为了在用户发送消息时改善用户体验,我手动更新 Recyclerview当前列表加上带有“上传指示”的新消息,然后当消息实际上传到 Firebase 时,侦听器会覆盖我使用的本地列表并将最后一条消息更新为“已上传”,问题是如果我重建活动,侦听器会自动更新Recyclerview 的列表到缓存的列表,因此用户无法再看到他的“上传”消息,直到它到达服务器。 是否正在考虑是否有一种手动方式可以将侦听器的缓存设置为本地列表而无需等待它上传?如果没有,也许有一个我没有想到的更好的解决方案? (我与许多不同的用户有很多不同的聊天,所以我需要能够获取每个聊天频道自己的唯一列表)

【问题讨论】:

    标签: android kotlin caching google-cloud-firestore listener


    【解决方案1】:

    有一个选项可以强制查询仅从缓存中检索数据。如果这是您需要的,您可以借助 DocumentReference.get(Source source)Query.get(Source source) 方法来实现。

    默认情况下,get() 通过等待来自服务器的数据尽可能尝试提供最新数据,但如果您处于离线状态且无法访问服务器,它可能会返回缓存数据或失败。可以通过 Source 参数更改此行为。

    因此,您可以将作为参数传递给DocumentReferenceQuery 源,以便我们可以强制从server onlychache only 检索数据或尝试服务器并回退到缓存。

    所以这样的事情就可以解决问题:

    FirebaseFirestore db = FirebaseFirestore.getInstance();
    DocumentReference docIdRef = db.collection("tests").document("fOpCiqmUjAzjnZimjd5c");
    docIdRef.get(Source.CACHE).addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            //Get data from the documentSnapshot object
        }
    });
    

    在这种情况下,我们强制仅从缓存中检索数据。如果您想强制仅从服务器检索数据,您应该将作为参数传递给get() 方法Source.SERVER。更多信息here.

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-01
    • 2020-02-25
    • 2020-04-30
    • 2021-03-29
    • 2012-06-05
    • 1970-01-01
    • 2017-10-22
    • 2021-05-14
    相关资源
    最近更新 更多