我写了一个简单添加缓存的方法
public class Retrofitmanager {
private Retrofit retrofit;
private OkHttpClient build;
//传入上下文对象 和 缓存文件名称 和 设置缓存文件大写
例如:
//context,"/wenjian",1024*1024*10
public Retrofitmanager setCache(Context context, String filename, long maxSize) {
File path = context.getCacheDir();
File file = new File(path, filename);
final Cache cache = new Cache(file, maxSize);
//缓存时间1小时
OkHttpClient okHttpClient = new OkHttpClient();
build = okHttpClient.newBuilder()
.cache(cache)
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request build = request.newBuilder().cacheControl(new
CacheControl.Builder().maxStale(1, TimeUnit.HOURS).build()).build();
Response proceed = chain.proceed(build);
return proceed;
}
}).build();
return this;
}
public Retrofit build(String baseUrl) {
if (build == null) {
retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(baseUrl).build();
} else {
retrofit = new Retrofit.Builder()
.client(build)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(baseUrl).build();
}
return retrofit;
}
}
需要缓存的时候
//需要缓存调用setCache()方法 在调用build()方法
// "/xxx" 缓存文件夹名字
Retrofit build = new Retrofitmanager().setCache(context,"/xxx",1024*1024*10).build("");
// 不需要缓存是直接调用build()方法
Retrofit build = new Retrofitmanager().build("");
注意:
bulid传入跟接口即可