本篇文章只是对okhttp的使用总结
想了解源码的同学可以看我的另一篇文章:终于懂了系列之OKHTTP源码解析
文章较长,建议收藏观看~
觉得有用的同学帮忙点个赞吧,谢谢!
Okhttp是一个第三方类库,用于android中请求网络。
这是一个开源项目,是安卓端最火热的轻量级框架
由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCanary) 。
用于替代HttpUrlConnection和Apache HttpClient(android API23 里已移除HttpClient)。
okhttp有自己的官网,官网网址:OKHttp官网
如果想了解原码可以在github上下载,地址是:https://github.com/square/okhttp
在AndroidStudio中使用不需要下载jar包,直接添加依赖即可:
下面对以OKHttp3来详细介绍OKHttp的使用方法
使用OKHttp进行网络请求支持两种方式,一种是同步请求,一种是异步请求。下面分情况进行介绍。
此时打印结果如下:
异步请求的打印结果与注意事项与同步请求时相同。最大的不同点就是异步请求不需要开启子线程,enqueue方法会自动将网络请求部分放入子线程中执行。
看完代码我们会发现:post请求中并没有设置请求方式为POST,回忆在get请求中也没有设置请求方式为GET,那么是怎么区分请求方式的呢?
重点是Request.Builder类的post方法,在Request.Builder对象创建最初默认是get请求,所以在get请求中不需要设置请求方式,当调用post方法时把请求方式修改为POST。所以此时为POST请求。
在post请求使用方法中讲了一种传递参数的方法,就是创建表单请求体对象,然后把表单请求体对象作为post方法的参数。post请求传递参数的方法还有很多种,但都是通过post方法传递的。下面我们看一下Request.Builder类的post方法的声明:
由方法的声明可以看出,post方法接收的参数是RequestBody 对象,所以只要是RequestBody 类以及子类对象都可以当作参数进行传递。FormBody就是RequestBody 的一个子类对象。
这种方式用来上传String类型的键值对
RequestBody是抽象类,故不能直接使用,但是他有静态方法create,使用这个方法可以得到RequestBody对象。
上传File对象使用示例如下:
然后使用body对象:
以上代码的与众不同就是body对象,这个body对象重写了write方法,里面有个sink对象。这个是OKio包中的输出流,有write方法。使用这个方法我们可以实现上传流的功能。
使用RequestBody上传文件时,并没有实现断点续传的功能。我可以使用这种方法结合RandomAccessFile类实现断点续传的功能。
其他部分代码略。
- 添加依赖
首先,在你的 build.gradle 文件中添加所需的依赖项:
- 创建 API 服务接口
- 创建网络客户端生成器
- 创建 ViewModel 示例
5.RequestState.java
定义一个回调接口 RequestCallback.java:
- 在 Activity 或 Fragment 中使用 ViewModel
1、包名改变
2、OkHttpClient参数配置
之前参数可以直接 设置,现在 使用创建者模式.

3、OkHttpClient创建方式不同
okhttp直接 ,而okhttp3中提供了 ,很好的使用了创建者设计模式.
4、cookie的设置方式不同:
3.0 之后新增了两个类Cookiejar、Cookie两个类,开放接口,需要用户自己去实现cookie的配管理。用户可以直接在CookieJar中简单设置Cookie的管理,如下:
5、post消息体构建方式不同
okhttp使用 ,构建post消息体,最终构建出来的都是 ,而okhttp3增加了RequestBody的子类,构造器放到了RequestBody的子类中,既可以添加表单数据,也可以添加文件等二进制数据。
6、Call和Callback不同
okhttp的callback方法是
okhttp3 的Callback方法有
okhttp3对Call做了更简洁的封装,okhttp3 Call是个接口,okhttp的call是个普通class,一定要注意,无论哪个版本,call都不能执行多次,多次执行需要重新创建。
7、OkHttpClient的Cancel方法去掉
8、对https支持的不同
公众号:【新时代程序员】

版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/11742.html