主流网络框架OkHttp简介与基本用法

主流网络框架OkHttp简介与基本用法

一、OkHttp简介
OkHttp是Square公司开源的针对Java和Android程序,封装的一个高性能http请求库。
相比于volley、retrofit、android-async-http封装了具体的请求,线程的切换以及数据转换,OkHttp是基于http协议封装的一套请求客户端,虽然其同样可以开线程,但是根本上它更偏向真正的请求,跟HttpClient和HttpURLConnection的职责是一样的。
主流网络框架OkHttp简介与基本用法
OkHttp类似于HttpURLConnection,是基于传输层实现应用层协议的网络框架,而不止是一个http请求应用的库。

二、OkHttp优缺点
OkHttp的优点:

  1. 支持HTTP/2:HTTP/2通过使用多路复用技术在一个单独的TCP连接上支持并发,通过在一个连接上。
  2. 如果HTTP/2不可用,连接池复用技术也可以极大减少延迟。
  3. 支持GZIP,可以压缩下载体积。
  4. 响应缓存可以直接避免重复请求
  5. 从很多常用的连接问题中自动恢复
  6. 如果服务器配置了多个IP地址,当第一个IP连接失败时,OkHttp会自动尝试下一个IP
  7. OkHttp还处理了代理服务器问题和SSL握手失败问题。
    此外,由于目前大范围使用的协议为HTTP/1.1,HTTP/2的应用不是很广泛,因此为了应对这个问题,HTTP/1.1引入了Upgrade机制。
    另外从Android4.4开始,HttpURLConnection的内部实现已经替换成OkHttp来实现。
    主流网络框架OkHttp简介与基本用法
    OkHttp的缺点:okHttp的回调方法,并不处于UI 线程中,对网络请求结果如果涉及UI 线程的操作,需要使用Handler。可以把它理解成是一个封装之后的类似 HttpUrlConnection 的一个东西,但是你在使用的时候仍然需要自己再做一层封装,这样才能像使用一个框架一样更加顺手。

三、OkHttp进行GET请求
使用OkHttp进行GET请求只需要四步即可完成:

  1. 获取OkHttpClient对象
    主流网络框架OkHttp简介与基本用法
  2. 构造Request对象
    主流网络框架OkHttp简介与基本用法
  3. 将Request封装成Call
    主流网络框架OkHttp简介与基本用法
  4. 根据需要调用同步或者异步请求方法
    需要特别注意是:
    同步调用会阻塞主线程,一般不使用。
     异步调用中的回调函数是在子线程,并不处于UI线程,这是和Retrofit等网络框架很大区别的地方,因此要对UI进行操作时需要应用到异步消息处理机制(如Handle、AsyncTask等)。
    主流网络框架OkHttp简介与基本用法

四、OkHttp进行POST
关于POST请求和GET的不同在于Request请求的构造不同,POST方式中的Request需要传递一个RequestBody作为post的参数。RequestBody有两个子类:FormBody和MultipartBody。

  1. RequestBody——Json数据提交等
    使用RequestBody进行POST并提交json字符串的例子如下。
    主流网络框架OkHttp简介与基本用法
    RequestBody通过设置MediaType.get()方法中的类型,能够设置的提交的数据类型有:String、ByteString、byte[]以及File。(此外,由于json可以用String进行提交,因此也能够提交json数据)。
  2. FormBody——表单数据提交
    FormBody是RequestBody的一个子类,其主要用于表单数据的提交,通过设置键值对数据,将其作为post()方法的参数进行提交,即可提交表单数据。
    主流网络框架OkHttp简介与基本用法
  3. MultipartBody——复杂请求体*
    MultipartBody同样是RequestBody的一个子类,其可以构建与HTML文件上传格式兼容的复杂请求体
    主流网络框架OkHttp简介与基本用法

参考资料:OkHttp使用详解
OkHttp的初步使用(get、post之{RequestBody、FormBody、MultipartBody})

上一篇:注解PathVariable


下一篇:Android Retrofit 2 0框架上传图片解决方案(一张与多张的处理)