Okhttp的缓存机制+拦截器
2017-12-20 19:39
381 查看
public class OkHttpUtils {
private final int CACHE_SIZE = 10*1024*1024;
public static final long DEFAULT_READ_TIMEOUT_MILLIS = 15 * 1000;
public static final long DEFAULT_WRITE_TIMEOUT_MILLIS = 20 * 1000;
public static final long DEFAULT_CONNECT_TIMEOUT_MILLIS = 20 * 1000;
private static volatile OkHttpUtils sInstance;
private OkHttpClient mOkHttpClient;
private OkHttpUtils() {
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
//包含header、body数据
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//缓存文件夹
File cacheFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/ksoncache");
if (!cacheFile.exists()){
cacheFile.mkdirs();
}
mOkHttpClient = new OkHttpClient.Builder()
.readTimeout(DEFAULT_READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
.writeTimeout(DEFAULT_WRITE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
.connectTimeout(DEFAULT_CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
//FaceBook 网络调试器,可在Chrome调试网络请求,查看SharePreferences,数据库等
.addNetworkInterceptor(new StethoInterceptor())
//http数据log,日志中打印出HTTP请求&响应数据
.addInterceptor(loggingInterceptor)
//添加缓存路径
.cache(new Cache(cacheFile, CACHE_SIZE))
//添加响应头cache-control
.addInterceptor(new MyInterceptor())
.build();
}
public static OkHttpUtils getInstance() {
if (sInstance == null) {
synchronized (OkHttpUtils.class) {
if (sInstance == null) {
sInstance = new OkHttpUtils();
}
}
}
return sInstance;
}
public OkHttpClient getOkHttpClient() {
return mOkHttpClient;
}
}
接下来是拦截器的实现
public class MyInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
String cacheControl = request.cacheControl().toString();
return response.newBuilder()
.header("Cache-Control", cacheControl)
.removeHeader("Pragma")
.build();
}
}
private final int CACHE_SIZE = 10*1024*1024;
public static final long DEFAULT_READ_TIMEOUT_MILLIS = 15 * 1000;
public static final long DEFAULT_WRITE_TIMEOUT_MILLIS = 20 * 1000;
public static final long DEFAULT_CONNECT_TIMEOUT_MILLIS = 20 * 1000;
private static volatile OkHttpUtils sInstance;
private OkHttpClient mOkHttpClient;
private OkHttpUtils() {
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
//包含header、body数据
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//缓存文件夹
File cacheFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/ksoncache");
if (!cacheFile.exists()){
cacheFile.mkdirs();
}
mOkHttpClient = new OkHttpClient.Builder()
.readTimeout(DEFAULT_READ_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
.writeTimeout(DEFAULT_WRITE_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
.connectTimeout(DEFAULT_CONNECT_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
//FaceBook 网络调试器,可在Chrome调试网络请求,查看SharePreferences,数据库等
.addNetworkInterceptor(new StethoInterceptor())
//http数据log,日志中打印出HTTP请求&响应数据
.addInterceptor(loggingInterceptor)
//添加缓存路径
.cache(new Cache(cacheFile, CACHE_SIZE))
//添加响应头cache-control
.addInterceptor(new MyInterceptor())
.build();
}
public static OkHttpUtils getInstance() {
if (sInstance == null) {
synchronized (OkHttpUtils.class) {
if (sInstance == null) {
sInstance = new OkHttpUtils();
}
}
}
return sInstance;
}
public OkHttpClient getOkHttpClient() {
return mOkHttpClient;
}
}
接下来是拦截器的实现
public class MyInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
String cacheControl = request.cacheControl().toString();
return response.newBuilder()
.header("Cache-Control", cacheControl)
.removeHeader("Pragma")
.build();
}
}
相关文章推荐
- 以 Okhttp3源码 为例 ------ 图解 缓存机制 的原理和实现(上)
- OkHttp中的拦截器机制源码解析
- OKHTTP缓存机制的学习
- Retrofit2.0+okhttp3缓存机制以及遇到的问题
- 以 Okhttp3源码 为例 ------ 图解 缓存机制 的原理和实现(下)
- OKHttp3(支持Retrofit2)的网络数据缓存Interceptor拦截器
- Android OkHttp 源码解析 (五) CacheInterceptor 缓存拦截器
- 网络请求工具类之OkHttp3封装(支持缓存、日志、拦截器、断点下载、上传等)
- 剖析OkHttp缓存机制
- 浅析 OkHttp 的拦截器机制
- Retrofit2.0+okhttp3缓存机制以及遇到的问题
- OkHttp源码阅读(四)拦截器、缓存拦截器实现、磁盘缓存
- okHttp缓存机制
- OkHttp的拦截器机制分析
- OKhttp3二次完美封装,内含日志,缓存拦截器
- okhttp的工作原理以及缓存机制
- 第7节缓存和刷新机制
- asp.net缓存技术与机制总结
- 第六章:【UCHome二次开发】缓存机制解析
- <MyBatis缓存机制>一级缓存源码浅析