java - Android Firestore - 在第一次打开时缓存数据然后使用快照更新?
问题描述
是否可以使用具有离线持久性的快照侦听器来仅读取自应用程序首次打开以来不同的文档?例如,我在第一个应用程序打开时从 /recipes/ 集合中读取所有食谱并缓存这些食谱。然后,当用户再次打开应用程序时,我使用快照侦听器检查来自服务器的集合是否未更改。如果我的数据库中有任何写入/删除/更新,它将更新我缓存的食谱,但如果没有,我将不会再次读取我的数据库。
我需要我的应用程序离线工作,但在需要时保持更新,而不需要在每次打开时进行数千次读取。
谢谢你的时间。
解决方案
Firestore 没有为此内置任何内容。原因很简单:要确定一个文档是否被修改,它必须在服务器上读取该文档。
自己添加它的最简单方法是在文档本身中包含有关何时修改文档的信息,然后仅查询自客户端上次连接以来修改的文档。
所以这是一个
last_modified
在每个文档中包含一个字段。确保每个写入操作都包含该字段,并将其设置为服务器的时间戳。
Map<String,Object> updates = new HashMap<>(); updates.put("last_modified", FieldValue.serverTimestamp()); docRef.update(updates)
使用服务器端安全规则来验证此字段是否始终设置且正确。
allow write: if request.resource.data.last_modified == request.time;
在客户端上仅查询自应用程序上次运行/读取数据以来修改过的文档。
- 将
last_read
时间戳存储在应用程序/设备的本地存储中。
推荐阅读
- node.js - 使用公共 wifi 发出 npm install
- javascript - 导入和破坏 es6 语法之间的关系?
- mysql - 使用 mysqldump 从 mariadb 数据库导出屏蔽数据
- reactjs - 使用 useCallback 和 useMemo 在 React 中重新渲染的问题
- javascript - 根据时间戳获取今天和昨天的项目
- ms-access - 取消form.unload事件时如何返回到指定控件?
- python - 维护 PyPDF2 的替代品
- java - 添加用户字段后的 StackOverflowError
- javascript - 如何使用 imagepack 在 React Native 中上传文件
- python - 如果用户选择了错误的文件类型,如何显示错误消息?