Open ningh2018 opened 6 years ago
你没有用拦截器给请求链接参数特别处理的不需要调用这个函数
就是在每个接口加了时间戳所以才要忽略这个字段,
这个地方写法有问题如果忽略字段不是最后一个会报数组越界
已经修复 ,请更新至1.0.8
谢谢,数组越界的问题解决了, 但是RetrofitCache.getInstance().addIgnoreParam 这个方法感觉依然无效,我在你的代码上面做了一点点修改增加一个时间戳参数access_token 然后RetrofitCache.getInstance().addIgnoreParam("access_token"); 断网后依然取不到缓存
addIgnoreParam 主要是忽略通过拦截器添加的参数后需要调用的,你看看这个issue: https://github.com/yale8848/RetrofitCache/issues/13
意思我在拦截器里面加上这个时间戳就可以忽略这个参数去取缓存吗?
是的,addIgnoreParam本身不需要调用的,对于有些需求比如说是给每个url添加一个参数等方式,这样实际上是修改了原来的链接,这样RetrofitCache是不能正常使用,所以后来我添加了个addIgnoreParam函数
我按照你说的方法吧 access_token 加在拦截器里面,如果access_token 的值是固定的可以取到缓存,如果access_token 的值不是固定的每次都在变动,比如是一个System.currentTimeMillis(), 就取不到缓存了, 是不是有问题?
你用最新的库吗?我这边测试没有问题
是1.0.8,我从git 克隆下拉就加了以下代码其他代码没有变动
public OkHttpClient getOkHttpClient(){ OkHttpClient.Builder clientBuilder=new OkHttpClient.Builder(); clientBuilder.readTimeout(20, TimeUnit.SECONDS); clientBuilder.connectTimeout(20, TimeUnit.SECONDS); clientBuilder.writeTimeout(20, TimeUnit.SECONDS); clientBuilder.addInterceptor(new MyInterceptor()); clientBuilder.addInterceptor(new LogInterceptor()); clientBuilder.addInterceptor(new CacheForceInterceptorNoNet()); clientBuilder.addNetworkInterceptor(new CacheInterceptorOnNet());
int cacheSize = 200 * 1024 * 1024;
File cacheDirectory = new File(mContext.getExternalCacheDir(), "httpcache");
Cache cache = new Cache(cacheDirectory, cacheSize);
return clientBuilder.cache(cache).build();
}
class MyInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
// Add access_token parameter if user login String accessToken = System.currentTimeMillis() + ""; HttpUrl originalUrl = request.url(); if (!TextUtils.isEmpty(accessToken) && originalUrl != null && TextUtils.isEmpty(originalUrl.queryParameter("access_token"))) { HttpUrl url = originalUrl.newBuilder().addEncodedQueryParameter("access_token", accessToken).build(); request = request.newBuilder().url(url).build(); } return chain.proceed(request); } }
好的,那我这边再测测
你好 ,我使用的是retrofitcachelibrx2 RetrofitCache.getInstance().addIgnoreParam缓存无效, 不加这个忽略没问题。请问是什么问题?