File httpCacheDirectory = new File(Environment.getExternalStorageDirectory(), "HttpCache");//这里为了方便直接把文件放在了SD卡根目录的HttpCache中,一般放在context.getCacheDir()中
int cacheSize = 10 * 1024 * 1024;//设置缓存文件大小为10M
Cache cache = new Cache(httpCacheDirectory, cacheSize);
httpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)//设置连接超时
.readTimeout(10, TimeUnit.SECONDS)//读取超时
.writeTimeout(10, TimeUnit.SECONDS)//写入超时
.addNetworkInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR)//添加自定义缓存拦截器(后面讲解),注意这里需要使用.addNetworkInterceptor
.cache(cache)//把缓存添加进来
.build();
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.client(httpClient)//把OkHttpClient添加进来
.addConverterFactory(GsonConverterFactory.create())
.build();
static Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
//网上很多示例代码都对在request请求前对其进行无网的判断,其实无需判断,无网自动访问缓存
// if(!NetworkUtil.getInstance().isConnected()){
// request = request.newBuilder()
// .cacheControl(CacheControl.FORCE_CACHE)//只访问缓存
// .build();
// }
Response response = chain.proceed(request);
if (NetworkUtil.getInstance().isConnected()) {
int maxAge = 60;//缓存失效时间,单位为秒
return response.newBuilder()
.removeHeader("Pragma")//清除头信息,因为服务器如果不支持,会返回一些干扰信息,不清除下面无法生效
.header("Cache-Control", "public ,max-age=" + maxAge)
.build();
} else {
//这段代码设置无效
// int maxStale = 60 * 60 * 24 * 28; // 无网络时,设置超时为4周
// return response.newBuilder()
// .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
// .removeHeader("Pragma")
// .build();
}
return response;
}
};
@Headers("Cache-Control:public ,max-age=60")
@GET("getBusiness.action")//商店信息
Call<RestaurantInfoModel> getRestaurantInfo(@Query("userId") String userId,@Query("businessId") String businessId);
static Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
if (NetworkUtil.getInstance().isConnected()) {
//获取头部信息
String cacheControl =request.cacheControl().toString();
return response.newBuilder()
.removeHeader("Pragma")//清除头信息,因为服务器如果不支持,会返回一些干扰信息,不清除下面无法生效
.header("Cache-Control", cacheControl)
.build();
}
return response;
}
};
/**
* 简单封装的Retroit初始化类
*/
public class initRetrofit {
private static String baseUrl = "http://202.171.212.154:8080/hh/";
private static OkHttpClient httpClient;
private static Retrofit retrofit;
public static Retrofit initRetrofit() {
//缓存路径和大小
File httpCacheDirectory = new File(Environment.getExternalStorageDirectory(), "HttpCache");
int cacheSize = 10 * 1024 * 1024;
Cache cache = new Cache(httpCacheDirectory, cacheSize);
//日志拦截器
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
httpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)//设置连接超时
.readTimeout(10, TimeUnit.SECONDS)//读取超时
.writeTimeout(10, TimeUnit.SECONDS)//写入超时
.addInterceptor(interceptor)//添加日志拦截器
.addNetworkInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR)//添加缓存拦截器
.cache(cache)//把缓存添加进来
.build();
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.client(httpClient)
.addConverterFactory(GsonConverterFactory.create())
.build();
return retrofit;
}
public static RetrofitAPI getService() {
return initRetrofit().create(RetrofitAPI.class);
}
// //缓存拦截器,不同接口不同缓存
// static Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new Interceptor() {
// @Override
// public Response intercept(Chain chain) throws IOException {
//
// Request request = chain.request();
// Response response = chain.proceed(request);
//
// if (NetworkUtil.getInstance().isConnected()) {
// String cacheControl =request.cacheControl().toString();
// return response.newBuilder()
// .removeHeader("Pragma")//清除头信息,因为服务器如果不支持,会返回一些干扰信息,不清除下面无法生效
// .header("Cache-Control", cacheControl)
// .build();
// }
// return response;
// }
// };
//缓存拦截器,统一缓存60s
static Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
if (NetworkUtil.getInstance().isConnected()) {
int maxAge = 60*60*24*2;//缓存失效时间,单位为秒
return response.newBuilder()
.removeHeader("Pragma")//清除头信息,因为服务器如果不支持,会返回一些干扰信息,不清除下面无法生效
.header("Cache-Control", "public ,max-age=" + maxAge)
.build();
}
return response;
}
};
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有