【发布时间】:2018-02-25 23:19:11
【问题描述】:
我使用 Retrofit 2 库和 okhttp3 在我的 android 应用程序中进行 API 调用。我需要在某些操作后使某些特定 url 的缓存无效(在创建新帖子后使获取帖子无效)。
在互联网上,每个人都说我需要获取缓存迭代器并通过调用 remove() 方法删除 url,但没有人说明如何正确执行。我正在尝试以这种方式从缓存中删除第一个 url:
Cache.urls().next().remove()
但是因为 urls() 方法是非静态的,所以它不起作用。我也不知道如何获取 okhttp 缓存实例。当我尝试时
Cache cache = new Cache(this.getCacheDir(), 10000);
cache.urls().next();
在MainActivity 里面,这次我得到了java.util.NoSuchElementException。
Failed to load DynamiteLoader: java.lang.NullPointerException: Attempt to invoke interface method 'android.os.IBinder com.google.android.gms.dynamic.IObjectWrapper.asBinder()' on a null object reference
09-17 11:37:38.868 21171-21171/com.elmxana.elmxana E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.elmxana.elmxana, PID: 21171
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.elmxana.elmxana/com.elmxana.elmxana.MainActivity}: java.util.NoSuchElementException
您能帮我找到使特定网址的缓存无效的确切解决方案吗?
【问题讨论】:
-
您是否尝试过从 okhttp 对象中检索缓存?
-
我试过了,但找不到办法。如果有,请写出来。如果您知道我的问题的完整答案并将其发布在这里,我将非常高兴。
-
okhttpClient.cache() 为您提供之前设置给客户端的缓存。
-
顺便说一句,错误日志没有指向 okhttp 缓存错误。您确定错误是由于 url 方法引起的吗?
-
我试过 okhttpClient = new OkHttpClient.builder.build(); okhttpClient.urls().next()。应用程序崩溃并显示在空对象引用上调用 urls() 方法的错误。我没有正确获取缓存吗?
标签: java android caching iterator okhttp3