Retrofit+RxJava实现文件下载附带进度条

本文介绍了如何使用Retrofit+RxJava在Android中实现文件下载,并配合进度条显示。通过自定义Okhttp拦截器监听进度,利用RxJava的doOnNext在子线程下载文件,然后在主线程更新进度。同时,文章提到了7.0以上系统的文件安装适配问题。
摘要由CSDN通过智能技术生成

Retrofit+RxJava实现文件下载附带进度条

项目中需要使用到更新版本,因此研究了一下Retrofit的下载文件,和进度条效果,其间也遇到了一些坑,写出来加深一下记忆,也为别的同学提供一下思路。

先说一下版本控制吧,通用做法基本上是通过接口获取服务器存储的app版本号,与应用的版本号进行比较,版本较低就去更新,先看一下如何获取应用版本号吧:

PackageManager packageManager = mActivity.getPackageManager();

        PackageInfo packageInfo = null;

        try {
            packageInfo = packageManager.getPackageInfo(mActivity.getPackageName(), 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }

        String versionName = packageInfo.versionName;

可以看到使用的是Context中的getPackageManager方法来获取PackageManager 对象,该对象可用于获取版本的一些信息。

上面的属于附内容,接下来就是关于Retrofit+RxJava实现进度条下载文件的功能,Retrofit本身不提供进度条显示的功能,但Retrofit默认使用Okhttp来进行网络请求,这里就可以自定义拦截器来进行拦截,实现进度。Okhttp的Demo中也为我们提供了一份代码,需要的可以去参考一下Progress.javar,可以看到拦截器的设置:

public class ProgressResponseBody extends ResponseBody {

    private ResponseBody responseBody;

    private ProgressListener progressListener;

    private BufferedSource bufferedSource;


    public ProgressResponseBody(ResponseBody responseBody,ProgressListener progressListener){

        this.responseBody=responseBody;

        this.progressListener=progressListener;
    }


    @Override
    public MediaType contentType() {

        return responseBody.contentType();
    }

    @Override
    public long contentLength() {

        return responseBody.
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值