android - 手动设置Firebase Firestore缓存

标签 android kotlin caching google-cloud-firestore listener

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

uploading message only local and uncached

and uploaded message as overwritten by listener

最佳答案

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

By default, get() attempts to provide up-to-date data when possible by waiting for data from the server, but it may return cached data or fail if you are offline and the server cannot be reached. This behavior can be altered via the Source parameter.



因此,您可以将其作为参数传递给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

关于android - 手动设置Firebase Firestore缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60337051/

相关文章:

linux - NUMA 感知缓存对齐内存分配

Android 抽屉导航不会将 onTouchEvent 传递给 Activity

android - 来自 getFilesDir() 的 FileProvider

android - 我应该使用哪种布局(相当于 css 内联 block )

android - 如何修复错误 : No signature of method: build_ap86oam3dut3pxce3x49rdtma. android()?

kotlin - 用Kotlin在1行中编写简单的for循环

java - 浅层平等和深层平等有什么区别?这如何应用于缓存?

android - 服务断点不起作用

string-formatting - Kotlin – 字符串格式化

caching - 高并发环境下NoSQL+分布式缓存的数据一致性