之前只是听说缓存,今天我自己也尝试了一下 ,运用了单例模式,我其实对这些都不是很熟悉,我就是学到哪记录到哪,如果有不对的地方,希望各位指教。

package com.silent.fuxiokhttpdemo;import android.content.Context;import java.io.File;
import java.io.IOException;import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;/*** 单例类-懒汉式* 1、私有化构造方法* 2、提供私有的静态的本类变量* 3、提供公有的静态的同步方法,并且返回值是本类对象*      判断本类变量指向的对象是否为空,如果为空则创建对象*** 现有线程A,B* A.start():进入就绪状态:相当于跑步时在起跑线上的准备* B.start():进入就绪状态:相当于跑步时在起跑线上的准备* A,B争夺CPU的执行权* A先争夺上CPU执行权-》进入运行状态-》OkHttpUtils2.getInstance->if (utils2==null)* B争夺上CPU执行权->进入运行状态-》OkHttpUtils2.getInstance-》if (utils2==null) utils2 = new OkHttpUtils2();* A又争夺上CPU的执行权->进入运行状态-》utils2 = new OkHttpUtils2();  return utils2;-》run方法执行完成-》线程进入死亡状态* B争夺上CPU的执行权-》进入运行状态-》return utils2;-》run方法执行完成-》线程进入死亡状态*** 同步锁:synchronized* 使用有3种:*      1、同步方法*      2、对象同步代码块*      3、class同步代码块** =============================分隔线===================================**1、导包,添加网络权限*2、创建单例类*3、创建OkHttpClient对象*4、提供GET\POST方法*5、GET:*      1、创建Request对象*      2、通过OkHttpClient对象调用newCall方法,得到Call对象*      3、通过Call对象发起同步或异步请求:execute 同步  enqueue异步**6、POST:**      1、创建Request对象,添加url,添加RequestBody对象*      2、通过OkHttpClient对象调用newCall方法,得到Call对象*      3、通过Call对象发起同步或异步请求:execute 同步  enqueue异步**/
public class OkHttpUtils2 {public static final long MAX_SIZE = 8*1024*1024;private static OkHttpUtils2 utils2;private OkHttpClient client;private OkHttpUtils2(Context context){//创建Cache对象,并设置缓存路径以及缓存区域大小File cacheDir = context.getCacheDir();//获取应用的缓存路径Cache cache = new Cache(cacheDir,MAX_SIZE);client = new OkHttpClient.Builder().cache(cache).addNetworkInterceptor(new Interceptor() {@Overridepublic Response intercept(Chain chain) throws IOException {// 1、通过Chain对象获取Request对象Request request = chain.request();//2、通过Chain对象重新发起请求,并获取Response对象Response proceed = chain.proceed(request);//移除头部信息:Pragma、Cache-ControlResponse response =  proceed.newBuilder().removeHeader("Pragma").removeHeader("Cache-Control").addHeader("Cache-Control","max-age="+(60)).build();return response;}}).build();}public static synchronized OkHttpUtils2 getInstance(Context context){//加锁if (utils2==null)utils2 = new OkHttpUtils2(context);return utils2;//解锁}public void sendGet(String url, Callback callback){Request request = new Request.Builder().url(url).build();Call call = client.newCall(request);call.enqueue(callback);}public void sendPost(String url, RequestBody body, Callback callback){Request request = new Request.Builder().url(url)
//                .post(body).method("POST",body)//设置POST请求的两种方式.build();Call call = client.newCall(request);call.enqueue(callback);}
}

okhttp缓存拦截器应用相关推荐

  1. okhttp之拦截器

    okhttp的拦截器是项目中的精髓代码,今天我们来具体分析一下,base4.9.1版本,首先列一下okhttp的类图用来加深印象 我们已经知道拦截器是在RealCall中添加的: val interc ...

  2. OKHttp五大拦截器

    文章目录 [1]五大拦截器总体概述 一.责任链设计模式 ①定义: ②为什么要使用责任链模式 [2]拦截器的工作流程 一.默认的5大拦截器有哪些? [3]RetryAndFollowUpIntercep ...

  3. LindAgile~缓存拦截器支持类的虚方法了

    写它的原因 之前写过一个缓存拦截器,主要在方法上添加CachingAspect特性之后,它的返回值就可以被缓存下来,下次访问时直接从缓存中返回结果,而它有一个前提,就是你的方法需要是一个接口方法,缓存 ...

  4. Okhttp 插入缓存拦截器 解析

    我们在做网络请求的时候,如果网络请求过于频繁而且请求的数据变动不大,或者基本没有变动,这个时候如果没有缓存功能,我们想一下 会浪费掉多少资源,一次请求刷新一次,去请求一次,不但会消耗用户的流量,而且还 ...

  5. okhttp初识拦截器

    拦截器流程: 简单回顾同步 / 异步: 同步请求就是执行请求的操作是阻塞式,直到HTTP响应返回. 异步请求就类似于非阻塞式的请求,它的执行结果一般都是通过接口回调的方式告知调用者. okHttp拦截 ...

  6. 好用的自定义Okhttp日志拦截器

    Okhttp中自带的日志拦截器 HttpLoggingInterceptor 实在是不好用,日志太多太乱,所以想要有好看.简洁的日志打印就要靠自定义了,下面分享我参照 HttpLoggingInter ...

  7. Android—OkHttp同步异步请求过程源码分析与拦截器

    OkHttp同步请求步骤: 创建OkHttpClient,客户对象 创建Request,请求主体,在请求主体设置请求的url,超时时间等 用newCall(request)将Reuqest对象封装成C ...

  8. Android OkHttp 源码解析 - 拦截器

    一.前言 看一下 RealCall 中的拦截器排序: Response getResponseWithInterceptorChain() throws IOException {// Build a ...

  9. Android OKHttp 可能你从来没用过的拦截器 【实用推荐】

    前言 在平时开发中,你有没有下面这样的困扰呢? 场景一 明明是服务端的接口数据错误,而QA(测试)第一个找到的可能是客户端开发的你,为什么这个页面出现错误了? 而作为客户端开发的你,可能要拿出测试机连 ...

最新文章

  1. 高德地图小蓝点_一会晴天一会下雨?夏日想要顺利出行 高德地图这些小功能最实用...
  2. nodejs 截断字符串_node.js – nodejs:字符串操作
  3. idft重建图像 matlab_利用 MATLAB 编程,打开一幅图像,对其进行 DFT 变换,并置其不同区域内的系数为零,进行 IDFT ,观察其输出效果。_学小易找答案...
  4. (转)淘淘商城系列——内容管理
  5. MySQL 时间戳转换成秒
  6. 在线CSS代码压缩美化工具
  7. 洛谷 P1854 花店橱窗布置
  8. npm:no such file /usr/local/lib/node_modules/vue-cli/node_modules/get-stream
  9. php单入口路由设计,php 简单路由实现
  10. 潘多拉固件设置ipv6_k2p下潘多拉/openwrt配置ipv6地址
  11. oracle修改dbf文件,如何修改Oracle的dbf文件位置
  12. Java 结构化数据处理开源库 SPL
  13. 多路IO复用(Linux)
  14. 独热编码-通过python代码讲解
  15. 取得股票市值和所属行业
  16. 移动端调试 chrome://inspect/#devices 钉钉开发Android调试微应用
  17. Qt图表绘制(QtCharts)-绘制简单的圆环图(7)
  18. 第三方支付系统--用户开户、信息认证以及信息修改流程
  19. 有线网络硬件接口简介
  20. Flutter报错总结:There are multiple heroes that share the same tag within a subtree.

热门文章

  1. PL/SQL,经常会遇见“Could not load ……\bin\oci.dll”这个错误
  2. 01背包:经典DP问题( 基本/滚动数组(优化)/恰好装满 )
  3. Java核心类库之(多线程:实现多线程、线程同步)
  4. 我与GPT关于音乐的对话1
  5. Cadence常见问题:Could not open“XXschematic“ for edit.Would you like to open it for read?
  6. JavaScript如何自定义标签属性
  7. Go:zap 自义定时间戳格式
  8. 智能 pos 机 密钥逻辑
  9. 重写类的ToString方法
  10. 从图形角度利用神经网络进行选股