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请求中相关推荐

  1. OkHttp协议介绍以及文件下载和上传+OkHttp协议封装+OkHttp拦截器____SpringBoot——集成Okhttp3

    OkHttp协议 okhttp是一个第三方类库,用于android中请求网络 这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCan ...

  2. Android OKHttp 拦截器

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

  3. doGet或doPost请求

    一.HTTP实现doGet或doPost请求原理介绍 1.浏览器发送请求到HttpSevr类调用HttpServ的service(servletRequest, servletReponse)方法 2 ...

  4. 通过拦截器获取控制类requestMapping注解中的属性值

     1.控制类: /*** 根据id删除*/@RequestMapping(value = "/user/{id}", method = RequestMethod.DELETE,n ...

  5. java封装拦截请求_Retrofit,OkHttp拦截器,RxJava封装请求网络

    Retrofit和Okhttp和RxJava的封装 导入依赖 compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex. ...

  6. Okhttp 拦截器 请求添加公共参数、公共Headers 方法

    retrofit 基于okhttp.使用retrofit /okhttp时候,这些都会wifi 直连的,不走系统的wifi设置,代理是抓不到包的.所以如果 想抓包那么抓网卡吧,打印请求或者添加公共参数 ...

  7. OKhttp 拦截器Intercept token失效验证

    转载请说明出处: 前言:我相信现在很多人都在用OKhttp作为网络请求库,为什么OKhttp会受到这么多人的青睐呢,谷歌也不例外(据我了解到它是唯一一个被谷歌认可的第三方网络请求库), 原因有很多,对 ...

  8. android方法拦截器,android OkHttp拦截器(Interceptor)的使用

    一 概念 在OkHttp内部是使用拦截器来完成请求和响应,利用的是责任链设计模式,能够用来转换,重试,重写请求的机制.如今主流的网络框架非Retrofit莫属,它的内部请求也是基于OkHttp的. 在 ...

  9. OkHttp - 拦截器篇

    续 根据上一篇 核心流程 ,我们大致知道了okhttp的内部运转,但是对于网络请求的缓存.连接复用以及网络监控的功能的实现,我们是只知其然,而不知其所以然,我们只知道是负责各个功能的拦截器帮助我们完成 ...

最新文章

  1. 18段代码带你玩转18个机器学习必备交互工具
  2. ztree html写法,ztree.html
  3. #if 和#ifdef的区别
  4. 官方文档翻译-ESP32-High Resolution Timer
  5. 初步认识Volatile-CPU层面的内存屏障
  6. centeros7安装mysql
  7. ipython控制台 绘图 后端_如何面试Python后端工程师?
  8. 亲情可以冷酷到什么地步?大家有亲身经历的吗?
  9. 全国计算机二级雷同卷怎么处理,信息系统项目管理师考试结束后,雷同卷怎么判定你知道吗?...
  10. 全靠阿里十年软测工程师的软测面试笔记,成功拿下12家大厂offer
  11. 金万维异速联产品简介
  12. 学计算机去一线城市,这5个“新一线”城市在线抢人,选择去这上大学非常有前景!...
  13. cpu load是什么?
  14. 永中java的窗口_永中Office二次开发技术手册 PDF 下载
  15. mac删除的文件还能找回吗
  16. 什么是网站服务器 域名 备案号,什么是网站服务器 域名 备案
  17. python arp断网攻击_ARP断网攻击怎么解决
  18. 通俗的解释docker
  19. 简单c语言实现小猫钓鱼
  20. ORACLE语句基本优化

热门文章

  1. 2022年GDCPC广东省大学生程序设计竞赛题解
  2. DataX将Hive中的数据导入MySQL乱码
  3. TMR1302水流量检测霍尔磁控开关
  4. android radiogroup 点击事件,RadioGroup的点击事件
  5. Revit二次开发之Journal日志文档【比目鱼原创】
  6. [网站分享] 全新的搜索引擎Goobe
  7. gnuplot绘图技巧
  8. Selenium+PhantomJS()+PIL漫画快照
  9. 前端小项目——模拟微信界面对话框
  10. 如何选择健身房管理系统捷径系统?