android - 如何使Apollo Android缓存无效?

标签 android kotlin graphql apollo-android

这是我用于缓存的阿波罗客户端代码

val apolloSqlHelper = ApolloSqlHelper.create(context,"my_app")
        val sqlNormalizedCacheFactory = SqlNormalizedCacheFactory(apolloSqlHelper)
        val cacheKeyResolver = object: CacheKeyResolver(){
            override fun fromFieldRecordSet(
                field: ResponseField,
                recordSet: MutableMap<String, Any>
            ): CacheKey {
                return if (recordSet["__typename"] == "Repository") {
                    CacheKey.from(recordSet["id"] as String)
                } else {
                    CacheKey.NO_KEY
                }
            }

            override fun fromFieldArguments(
                field: ResponseField,
                variables: Operation.Variables
            ): CacheKey {
                return  CacheKey.NO_KEY
            }
        }

        ApolloClient.builder().serverUrl(baseUrl)
            .normalizedCache(sqlNormalizedCacheFactory,cacheKeyResolver)
            .okHttpClient(okHttpClient).build()

我正在做一个查询,之后阿波罗会缓存我的结果,但是当向查询中添加更多数据时,我不明白如何根据结果是否更改来使缓存无效。如果结果没有变化,请从缓存中获取数据或获取新数据并更新缓存

最佳答案

我不需要手动使缓存无效。 Apollo Android为我处理

这段代码对我有用

apolloClient.query(MyQuery()).responseFetcher(ApolloResponseFetchers.NETWORK_FIRST)
ApolloResponseFetchers还提供各种选项,例如CACHE_FIRSTCACHE_ONLY

关于android - 如何使Apollo Android缓存无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62227820/

相关文章:

android - 目标平台部分的 IOS 选项是灰色的,不可点击

android - 如何处理不同的屏幕尺寸以便 TextView 缩放

spring-boot - 逗号分隔的请求参数不适用于 Kotlin 数据类

android - RxJava 不在后台线程上运行

graphql - Apollo GraphQL 错误处理

javascript - 使用中继js向前和向后分页

java - 绕过对话框或无提示打印

java - Android:EditText导致内存泄漏

java - Junit 测试类如何检测 kotlin 文件中定义的类?

node.js - NodeInterface 和 nodeField 在 relayjs 中是如何工作的,它们是什么意思