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;
}