okHttp
来源:互联网 发布:cs go 准星数据 编辑:程序博客网 时间:2024/06/03 23:44
okhttp 是支持缓存的。
第一步:我们需要通过单例模式创建实例
private OkHttpManger(){ throw new UnsupportedOperationException("cannot be instantiated");}public static OkHttpClient getClient(){ if (mOkHttpManger == null) { synchronized (OkHttpManger.class){ if(mOkHttpManger == null){ create(); } } } return mOkHttpManger;}
第二步:涉及到两个拦截操作
网络拦截:1)请求拦截一次,返回拦截一次 。一共2次。2)主要用于响应头添加和缓存处理。
应用拦截:1)只有服务器返回才进行拦截。2)主要用来打印log。
第三步:编写应用拦截
static class AppInterceptor implements Interceptor{ @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); long t1 = System.nanoTime(); Response response = chain.proceed(request); //网络响应打印 if(response != null){ long t2 = System.nanoTime(); String responseString = new String(response.body().bytes()); LogUtil.e(TAG,String.format("请求路径: %s", request.url()) +"\n"+String.format("Access Server in %.1fms ,返回值: %s", (t2 - t1) / 1e6d , responseString)); return response.newBuilder().body( ResponseBody.create(response.body().contentType(), responseString)).build(); } return null; }}
第三步:添加网络拦截
//网络拦截器 2次 添加缓存和公共参数static class NetInterceptor implements Interceptor{ @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); if(!MyApplication.networkAvailable){ LogUtil.i("use cache data beacause no net"); request = request.newBuilder() .cacheControl(CacheControl.FORCE_CACHE) .build(); } Response response = chain.proceed(request); if(MyApplication.networkAvailable){ String cacheControl = request.cacheControl().toString(); if (TextUtils.isEmpty(cacheControl)) { //有网络时设置缓存超时时间60s cacheControl = "public, max-age=60 ,max-stale=2419200"; } return response.newBuilder() .removeHeader("Pragma") .removeHeader("Cache-Control") .header("Cache-Control", cacheControl) .build(); }else { return response.newBuilder() .header("Cache-Control", "public, only-if-cached, max-stale=2419200") .removeHeader("Pragma") .build(); } }}
最后一步:我们就把缓存和基本的okhttp设置添加、
private static void create(){ //网络缓存 当没有网络时,可使用缓存 int maxCacheSize = 10 * 1024 * 1024; File cacheFile = new File(MyApplication.getAppContext().getCacheDir(), "gz_corp"); final Cache cache = new Cache(cacheFile, maxCacheSize); mOkHttpManger = new OkHttpClient.Builder() .addNetworkInterceptor(new NetInterceptor()) .addInterceptor(new AppInterceptor()) .retryOnConnectionFailure(true) .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) .writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) .readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) .cache(cache) .build();}
阅读全文
0 0
- OkHttp
- okhttp
- OkHttp
- OkHttp
- OkHttp
- okhttp
- OKHTTP
- okhttp
- Okhttp
- okHttp
- OkHttp
- okhttp
- Okhttp
- okhttp
- OkHttp
- okhttp
- okhttp
- okhttp
- ###①Maven国内私服快速下载—阿里云+②maven向仓库添加依赖jar包 技巧:Maven中的settings.xml设置远程镜像库
- Matplotlib官方文档详解
- wangluoqingqiu diyipian
- 控制按钮隐藏
- 第五节 String类,subString,equals方法
- okHttp
- git&github使用问题和解决记录
- practise函数实现——乘法口诀表,判断素数,交换两数,判断闰年,数组的初始清空逆置
- datagridview 手动添加行数据
- wangluoqingqiu dierpian
- WHAT IS THE XXXX?
- .NET,C#和ASP.NET的关系
- 测试->转载博文
- JS String对象slice substr substring的对比