OKHTTP使用详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OKHTTP使用详解相关的知识,希望对你有一定的参考价值。

参考技术A 以前做android开发一直用的httpclient,最近参加了工作,发现真正的项目里面用的是okhttp,就想要针对它来写一篇文章记录一下,也是希望自己能够弄懂它,尽快摆脱菜鸟的身份。话不多说,进入主题。[参照原文] https://www.cnblogs.com/alterem/p/11403695.html

okhttp其实就是一套网络请求的框架,它的作用和httpclient一样,只是好像在Android6.0以后谷歌就删除了httpclient,所以现在大家还是写着用okhttp吧,毕竟程序员还是要跟上技术的迭代和更新,这是非常重要的。

如果GET请求需要加请求参数直接用?拼接在url里面,不同参数之间用&拼接,例如:
https:www.baidu.com?username=admin&password=admin

同步调用会阻塞主线程,一般不用
异步调用的runOnUiThread()类似于Handler,用来更新ui,另外一定要记住,所有的网络请求都不能在主线程中,所以okhttp的所有操作都要在子线程中执行。

Okhttp 使用详解

参考技术A

一个最简单的OkHttpClient

一个复杂点的OkHttpClient配置

具体可配置参数见OkHttpClient.Builder类,几点注意事项:

两种拦截器的区别

官方提供的Logging Interceptor

地址: https://github.com/victorfan336/okhttp-logging-interceptor
gradle.build中添加依赖:
compile \'com.squareup.okhttp3:logging-interceptor:3.1.2\'

通过Request.Builder创建请求,默认是Get请求

主要是构建RequestBody,并设置Content-Type消息头。

1.普通Post请求

比如json请求

2. 使用FormBody传递键值对参数
Content-Type: application/x-www-form-urlencoded
比如:

3. 使用RequestBody传递Json或File对象

4. 使用MultipartBody同时传递键值对参数和File对象

5. 使用MultipartBody提交分块请求

6. 自定义RequestBody实现流的上传

1、同步执行

由于android强制要求网络请求在线程中执行,所以无法使用execute

2、异步执行

1. 设置请求头

2. 设置超时

3. 设置缓存

1、对于Get请求,如果请求参数较多,自己拼接Url较为麻烦

比如

拼接结果: http://www.baidu.com/user/login/username=zhangsan&password=123456

如果能做一些封装,直接addParam(key,value)的形式则会简单很多。

2、Callback在子线程中回调,大部分时候,我们都是需要更新UI的,还需自己post到主线程中处理。
3、构建请求步骤比较多
因此,Square提供了针对OkHttp的封装库Retrofit,另外Github上也有很多第三方的封装库,比如OkGo。

以上是关于OKHTTP使用详解的主要内容,如果未能解决你的问题,请参考以下文章

Okhttp 使用详解

Okhttp使用详解

Okhttp使用详解

OkHttp的封装和使用详解

Android OkHttp3简介和使用详解

Android OkHttp使用和源码详解