zoukankan      html  css  js  c++  java
  • Okhttp实用封装

    概述

    对okhttp的get,put,delete,post请求简单封装,减少了不必要的冗余代码

    详细

    在自己项目的开发过程中需要用到网络请求,且用的okhttp网络框架,虽然用起来很方便,但是倒出充斥着重复代码,所以在研究了okhttp源码的基础上对Okhttp的使用进行了封装,结构清晰,可以满足基本的上传、下载、put,delete,get,post请求。如果想了解okhttp的工作原理,也可以参考本文后面留的博客地址

    一、准备工作

    在gradle文件中配置:

    compile "com.squareup.okhttp3:okhttp:3.8.0"

    二、程序实现

    1、封装库的代码结构如下:

    M2`PY)X4L%{J[(_}5]WATKP.png

    interf包:提供了IHttpConnect接口作为一个http链接,IResponse接口作为网络返回的响应接口;IRequestCallback接口作为每一个request请求的回调。

    public interface IHttpConnect {
        /**
         * 异步请求
         */
        void asyncConnect(@NonNull HttpRequest request);
    
        /**
         * 同步链接请求,不能在主线程中调用,只能在异步线程中,并且注意同步引起的性能问题
         */
        @WorkerThread
        IResponse syncConnect(@NonNull HttpRequest request);
    
        void abort(HttpRequest request);
    
        void abortAll();
    }

    impl包:提供了一些IRequestCallback的简单实现,比如DownLoadCallback实现了文件下载功能。

    okhttp包:其中OkhttoConnect是IHttpConnect接口的实现类,OkhttpHelper具体实现了Okhttp发起网络请求的功能。

    request包:提供了OkhttpRequest类,作为请求参数的包装类。UploadFileReqeust作为文件上传用

    response包:提供了OkResponse对象,作为Okhttp请求返回的封装

    ConnectHelper:对我提供的IHttpConnect的适配类,其具体工作交给IHttpConnect的具体实现类,为简单的适配器模式

    2、实现思路

    从设计思路上来看,一个Request就是一个IHttpConnect发起的一个同步或者异步请求的过程,对于同步请求来说就是一个IHttpConnect实现类发起的syncConnect(Httprequest)过程,异步请求就是IHttpConnect发起的asyncConne(HttpRequest)过程。

    3、简单的get请求:

    ConnectHelper connectHelper = new ConnectHelper();
        HttpRequest.Builder builder = new HttpRequest.Builder();
            builder.setUrl("http://www.baidu.com")
                    .addHeader("xxx", "yyyy")
                    .addParams("xxx", "yyyy")
                    .setParams(map)
                    .setHeaders(map)
                    .setCallback(new RequestCallbackImpl() {
                        @Override
                        public void requestFinish(HttpRequest request, IResponse response) {
                           
                        }
                    });
            HttpRequest request = builder.build();
            connectHelper.asyncConnect(request);

    4、简单的post请求:

      HttpRequest.Builder builder = new HttpRequest.Builder();
            builder.setUrl("http://www.baidu.com")
                    .setRequestType(RequestType.DELETE)
                    .addHeader("xxx", "yyyy")
                    .addParams("xxx", "yyyy")
                    .setCallback(new RequestCallbackImpl() {
                        @Override
                        public void requestFinish(HttpRequest request, IResponse response) {
    
                        }
                    });
            HttpRequest request = builder.build();
            connectHelper.asyncConnect(request);

    5、简单的put请求:

      HttpRequest.Builder builder = new HttpRequest.Builder();
            builder.setUrl("http://www.baidu.com")
                    .setRequestType(RequestType.PUT)
                    .addHeader("xxx", "yyyy")
                    .addParams("xxx", "yyyy")
                    .setCallback(new RequestCallbackImpl() {
                        @Override
                        public void requestFinish(HttpRequest request, IResponse response) {
    
                        }
                    });
            HttpRequest request = builder.build();
            connectHelper.asyncConnect(request);

    如果想使用文件下载功能,把callback传DownLoadCallback即可

    三、运行效果

    比如get请求获取字符串的requestCallBack如下:

    setUrl("http://www.baidu.com")
            .addHeader("xxx", "yyyy")
            .addParams("xxx", "yyyy")
            .setCallback(new RequestCallbackImpl() {
                @Override
                public void requestFinish(HttpRequest request, IResponse response) {
                    System.out.print("respose ==" + response.getString());
    
                }
            });

    运行打印效果如下:

    QQ截图20170829110044.png

    四、其他补充

    1、除了addHeaders和addParams之外,如果需要批量添加一些header或者param也可以调用Builder的setHeaders(map)或者setParams(map)方法,将headers或者params放入map里面一次构建完成

    2、如果需了解okhttp的工作原理的话,可以参考Ohttp源码分析系列博客

    注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

  • 相关阅读:
    Firefox浏览器安装 Disable Javascript插件
    Web常见漏洞及修复建议
    查询公网出口IP
    jQuery jsonp跨域请求--转载自https://www.cnblogs.com/chiangchou/p/jsonp.html
    理解闭包 js回收机制--转载https://www.cnblogs.com/wangyingblog/p/5569745.html
    全面理解Javascript闭包和闭包的几种写法及用途--转载自https://www.cnblogs.com/yunfeifei/p/4019504.html
    什么是闭包?闭包的优缺点?--转载自https://www.cnblogs.com/cxying93/p/6103375.html
    JavaScript局部变量和全局变量的理解--转载自https://www.cnblogs.com/eric-qin/p/4166552.html
    好文收藏
    SQL In和Like 参数化
  • 原文地址:https://www.cnblogs.com/demodashi/p/8491091.html
Copyright © 2011-2022 走看看