前言
前面介绍了很多关于Retrofit2的基本使用,下面就单独介绍一下如何使用Retrofit2实现文件上传和文件下载,并且做了一点拓展,重点介绍了一下上传和下载过程中进度的显示。
文件上传
定义接口
|
|
构造所要上传的RequestBody
|
|
通过Retrofit提供的方法就可以很简单的将文件上传到服务器,但通常上传文件时,都会加上文件的上传进度,这样交互会显得更加友好。而Retrofit本身是不支持文件上传进度显示的,所以就需要我们自己扩展OkHttp来实现文件上传进度。
我的做法是直接扩展一个RequestBody来实现进度显示,实现完成之后只需要将上面body进行包装转换即可。
首先封装一个RetrofitCallback,用于进度的回调。
|
|
第二步,扩展OkHttp的请求体,编写包装类FileRequestBody,对RequestBody进行包装
|
|
最后,通过onLoading(long total, long progress) ,更新上传进度
|
|
文件下载
接口定义
文件下载请求与普通的Get和Post请求是一样的,只是他们的返回值不一样而已,文件下载请求的返回值一般定义成ResponseBody
|
|
发起请求
|
|
下载进度显示
通过OkHttp设置拦截器将ResponseBody进行转换成我们扩展后的ResponseBody
扩展ResponseBody设置OkHttp拦截器
|
|
FileResponseBody
总结
依照惯例,最后都要有一个总结,先感叹一下retrofit的强大。ok,再来说一下使用过程中的感受,从本文中也感受的到,就是retrofit大量的引入了对okhttp 应用,所以要想用好retrofit ,学好okhttp 也是必须的,不说了,啃代码去了。