说明
这里不会对Retrofit进行介绍,欲了解Retrofit的请自行google之。这里只关注如何用Retrofit从服务器下载文件。
Retrofit下载普通文件
这里普通文件是指比较小的文件,比如图片、文本等。如果你厌倦了HttpRequest下载文件的方式,相信你看了下文一定会喜欢上Retrofit的。
这里我以Android中下载网络图片来设置ImageView为例:
定义Retrofit接口
|
|
异步下载图片并设置ImageView
|
|
有一点需要注意,那就是必须以ResponseBody作为返回类型,Retrofit会试图解析并转换它,所以不能使用任何其他返回类型,否则下载的文件毫无意义。
文件下载下来了,要保存在本地也就是很简单的事了。
Retrofit下载大文件
默认情况下,Retrofit在处理结果之前会将这个ResponseBody读进内存,这在普通文件的Response上表现还好,但如果是一个视频等大文件,就极有可能导致OutOfMemory。
好在Retrofit为了避免这个问题,引入了Streaming注解!它意味着立即传递字节码而不是一下子传递整个文件然后缓存在内存中。来看下面的例子:
这里也有一点需要特别注意:onResponse()、onFailure()方法都是在主线程中调用的,因此最好使用AsyncTask()来处理保存文件到本地的操作,不然会阻塞UI线程。