okHttp拦截器放在doGet和doPost请求中
public class OkHttp3Util {
/**
* 懒汉 安全 加同步
* 私有的静态成员变量 只声明不创建
* 私有的构造方法
* 提供返回实例的静态方法
*/
private static OkHttpClient okHttpClient = null;
private OkHttp3Util() {
}
public static OkHttpClient getInstance() {
if (okHttpClient == null) {
//加同步安全
synchronized (OkHttp3Util.class) {
if (okHttpClient == null) {
//okhttp可以缓存数据....指定缓存路径
File sdcache = new File(Environment.getExternalStorageDirectory(), "cache");
//指定缓存大小
int cacheSize = 10 * 1024 * 1024;
okHttpClient = new OkHttpClient.Builder()//构建器
.connectTimeout(15, TimeUnit.SECONDS)//连接超时
.writeTimeout(20, TimeUnit.SECONDS)//写入超时
.readTimeout(20, TimeUnit.SECONDS)//读取超时
//.addInterceptor(new CommonParamsInterceptor())//添加的是应用拦截器...公共参数
//.addNetworkInterceptor(new CacheInterceptor())//添加的网络拦截器
.cache(new Cache(sdcache.getAbsoluteFile(), cacheSize))//设置缓存
.build();
}
}
}
return okHttpClient;
}
/**
* get请求
* 参数1 url
* 参数2 回调Callback
*/
public static void doGet(String oldUrl, Callback callback) {
//要添加的公共参数...map
Map<String,String> map = new HashMap<>();
map.put("source","android");
StringBuilder stringBuilder = new StringBuilder();//创建一个stringBuilder
stringBuilder.append(oldUrl);
if (oldUrl.contains("?")){
//?在最后面....2类型
if (oldUrl.indexOf("?") == oldUrl.length()-1){
}else {
//3类型...拼接上&
stringBuilder.append("&");
}
}else {
//不包含? 属于1类型,,,先拼接上?号
stringBuilder.append("?");
}
//添加公共参数....
for (Map.Entry<String,String> entry: map.entrySet()) {
//拼接
stringBuilder.append(entry.getKey())
.append("=")
.append(entry.getValue())
.append("&");
}
//删掉最后一个&符号
if (stringBuilder.indexOf("&") != -1){
stringBuilder.deleteCharAt(stringBuilder.lastIndexOf("&"));
}
String newUrl = stringBuilder.toString();//新的路径
//创建OkHttpClient请求对象
OkHttpClient okHttpClient = getInstance();
//创建Request
Request request = new Request.Builder().url(newUrl).build();
//得到Call对象
Call call = okHttpClient.newCall(request);
//执行异步请求
call.enqueue(callback);
}
/**
* post请求
* 参数1 url
* 参数2 Map<String, String> params post请求的时候给服务器传的数据
* add..("","")
* add()
*/
public static void doPost(String url, Map<String, String> params, Callback callback) {
//要添加的公共参数...map
Map<String,String> map = new HashMap<>();
map.put("source","android");
//创建OkHttpClient请求对象
OkHttpClient okHttpClient = getInstance();
//3.x版本post请求换成FormBody 封装键值对参数
FormBody.Builder builder = new FormBody.Builder();
//遍历集合
for (String key : params.keySet()) {
builder.add(key, params.get(key));
}
//添加公共参数
for (Map.Entry<String,String> entry: map.entrySet()) {
builder.add(entry.getKey(),entry.getValue());
}
//创建Request
Request request = new Request.Builder().url(url).post(builder.build()).build();
Call call = okHttpClient.newCall(request);
call.enqueue(callback);
}
okHttp拦截器放在doGet和doPost请求中相关推荐
- OkHttp协议介绍以及文件下载和上传+OkHttp协议封装+OkHttp拦截器____SpringBoot——集成Okhttp3
OkHttp协议 okhttp是一个第三方类库,用于android中请求网络 这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCan ...
- Android OKHttp 拦截器
前言 在平时开发中,你有没有下面这样的困扰呢? 场景一 明明是服务端的接口数据错误,而QA(测试)第一个找到的可能是客户端开发的你,为什么这个页面出现错误了? 而作为客户端开发的你,可能要拿出测试机连 ...
- doGet或doPost请求
一.HTTP实现doGet或doPost请求原理介绍 1.浏览器发送请求到HttpSevr类调用HttpServ的service(servletRequest, servletReponse)方法 2 ...
- 通过拦截器获取控制类requestMapping注解中的属性值
1.控制类: /*** 根据id删除*/@RequestMapping(value = "/user/{id}", method = RequestMethod.DELETE,n ...
- java封装拦截请求_Retrofit,OkHttp拦截器,RxJava封装请求网络
Retrofit和Okhttp和RxJava的封装 导入依赖 compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex. ...
- Okhttp 拦截器 请求添加公共参数、公共Headers 方法
retrofit 基于okhttp.使用retrofit /okhttp时候,这些都会wifi 直连的,不走系统的wifi设置,代理是抓不到包的.所以如果 想抓包那么抓网卡吧,打印请求或者添加公共参数 ...
- OKhttp 拦截器Intercept token失效验证
转载请说明出处: 前言:我相信现在很多人都在用OKhttp作为网络请求库,为什么OKhttp会受到这么多人的青睐呢,谷歌也不例外(据我了解到它是唯一一个被谷歌认可的第三方网络请求库), 原因有很多,对 ...
- android方法拦截器,android OkHttp拦截器(Interceptor)的使用
一 概念 在OkHttp内部是使用拦截器来完成请求和响应,利用的是责任链设计模式,能够用来转换,重试,重写请求的机制.如今主流的网络框架非Retrofit莫属,它的内部请求也是基于OkHttp的. 在 ...
- OkHttp - 拦截器篇
续 根据上一篇 核心流程 ,我们大致知道了okhttp的内部运转,但是对于网络请求的缓存.连接复用以及网络监控的功能的实现,我们是只知其然,而不知其所以然,我们只知道是负责各个功能的拦截器帮助我们完成 ...
最新文章
- 18段代码带你玩转18个机器学习必备交互工具
- ztree html写法,ztree.html
- #if 和#ifdef的区别
- 官方文档翻译-ESP32-High Resolution Timer
- 初步认识Volatile-CPU层面的内存屏障
- centeros7安装mysql
- ipython控制台 绘图 后端_如何面试Python后端工程师?
- 亲情可以冷酷到什么地步?大家有亲身经历的吗?
- 全国计算机二级雷同卷怎么处理,信息系统项目管理师考试结束后,雷同卷怎么判定你知道吗?...
- 全靠阿里十年软测工程师的软测面试笔记,成功拿下12家大厂offer
- 金万维异速联产品简介
- 学计算机去一线城市,这5个“新一线”城市在线抢人,选择去这上大学非常有前景!...
- cpu load是什么?
- 永中java的窗口_永中Office二次开发技术手册 PDF 下载
- mac删除的文件还能找回吗
- 什么是网站服务器 域名 备案号,什么是网站服务器 域名 备案
- python arp断网攻击_ARP断网攻击怎么解决
- 通俗的解释docker
- 简单c语言实现小猫钓鱼
- ORACLE语句基本优化