Kotlin Android:如何用ApolloStore API修改规范化缓存并通知监听者?
在Kotlin Android中编辑Apollo GraphQL规范化缓存并通知监听者
要实现将Post:247的favorites计数递增1并触发监听通知,可以通过ApolloStore的update方法完成,以下是具体步骤和代码:
核心实现步骤
- 获取ApolloStore实例(通常从已初始化的ApolloClient实例获取)
- 通过
update方法开启缓存事务,在事务内完成读取目标缓存项、修改字段、写回缓存的操作 - 事务提交后,Apollo会自动通知所有监听该缓存项的查询或订阅
代码示例
// 假设已初始化ApolloClient实例 val apolloStore = apolloClient.apolloStore() // 执行缓存更新操作 apolloStore.update { transaction -> // 1. 读取目标缓存记录,不存在则直接退出 val postRecord = transaction.readRecord("Post:247") ?: return@update // 2. 安全读取并递增favorites计数 val currentFavorites = postRecord.fields["favorites"] as? Int ?: 0 val updatedFields = postRecord.fields.toMutableMap().apply { this["favorites"] = currentFavorites + 1 } // 3. 创建更新后的记录并写回缓存 val updatedRecord = postRecord.copy(fields = updatedFields) transaction.writeRecord(updatedRecord) }
关键说明
update方法是原子操作,保障缓存修改的一致性- 事务内的读写操作线程安全,无需额外同步处理
- 记录写回后,所有依赖该缓存项的活跃查询会自动收到更新通知,触发对应UI刷新
- 若项目使用Apollo生成的强类型模型,也可结合
readOperation和writeOperation基于模型类修改,但直接操作Record更适合这类单字段更新场景
内容的提问来源于stack exchange,提问作者HavanaSun
相关产品推荐
相关产品推荐

