1自定义拦截器 继承拦截器
public class NetworkInterceptor implements Interceptor {
//缓存有效时间
private final static int TIME_CACHE_HOURS = 1;
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
CacheControl cacheControl = new CacheControl.Builder()
.maxAge(TIME_CACHE_HOURS, TimeUnit.HOURS)
.maxStale(TIME_CACHE_HOURS, TimeUnit.HOURS)
.build();
return response.newBuilder()
.removeHeader("Pragma")
//在这里生成新的响应并修改它的响应头
.header("Cache-Control", cacheControl.toString())
.build();
}
}
2 在retrofit里面添加拦截器
private RetrofitFactory(String baseUrl ,Context context) {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(5, TimeUnit.SECONDS);
builder.readTimeout(5, TimeUnit.SECONDS);
builder.writeTimeout(5, TimeUnit.SECONDS);
// 设置缓存大小
int cacheSize = 10 * 1024 * 1024;
builder.addNetworkInterceptor(new NetworkInterceptor());
builder.cache(new Cache(new File(context.getExternalCacheDir(), "http_cache")
, cacheSize));
//1.创建Retrofit对象
retrofit = new Retrofit.Builder().baseUrl(baseUrl) // 定义访问的主机地址
.client(builder.build())
.addConverterFactory(GsonConverterFactory.create()) //解析方法
.build();
}
3使用先获取实例:
public static RetrofitFactory getInstance(String baseUrl,Context context) {
instance = new RetrofitFactory(baseUrl,context);
return instance;
}
4通过实例调用retrofit的api 获取response 通过response.body 获取结果