您当前的位置: 首页 >  cmmboy1990

Retrofit 上传文件,进度条打印2次

cmmboy1990 发布时间:2021-07-09 16:25:51 ,浏览量:4

Retrofit 上传文件,进度条打印2次

1.问题: 上传进度一出现两次 0%~ 100%,第一次快速,第二次稍慢(真正的上传文件)

2.原因: a.增加了请求头拦截器 b.增加了日志打印拦截器 代码:

//请求数据拦截器
.addInterceptor(requestInterceptor)
//TODO 开启日志后 上传文件进度出现2次
if (BuildConfig.DEBUG) {
     HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
     httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
     builder.addInterceptor(httpLoggingInterceptor);
 }

注意:返回拦截器不影响!!!

3.解决:

出现的问题原因:

自定义的上传文件ProgressRequestBody 的 writeTo(BufferedSink sink) 方法会被调用一次,用于打印日志,在之后又会被调用一次,用于真正的上传。

在这里插入图片描述 在这里插入图片描述 4.解决:

日志拦截器中的 BufferedSink 是 Buffer 类型,而实际进行网络请求的 BufferedSink 是 FixedLengthSink。所以修改 ProgressRequestBody 里的 writeTo(BufferedSink sink) 方法,如果传入的 sink 为 Buffer 对象,则直接写入,不进行统计

在这里插入图片描述

if (sink instanceof Buffer) {
     return;
 }
关注
打赏
1688896170
查看更多评论

cmmboy1990

暂无认证

  • 4浏览

    0关注

    131博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0513s