OKHTTP使用详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OKHTTP使用详解相关的知识,希望对你有一定的参考价值。
参考技术A 以前做android开发一直用的httpclient,最近参加了工作,发现真正的项目里面用的是okhttp,就想要针对它来写一篇文章记录一下,也是希望自己能够弄懂它,尽快摆脱菜鸟的身份。话不多说,进入主题。[参照原文] https://www.cnblogs.com/alterem/p/11403695.htmlokhttp其实就是一套网络请求的框架,它的作用和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使用详解的主要内容,如果未能解决你的问题,请参考以下文章