遇到这个问题是在某个项目中,项目使用了rxjava+retrofit+okhttp来进行网络通讯,由于项目中需要上传图片并获取进度,so需要继承requestbody重写writeTo方法来获取写入进度。
本来没有什么问题,一切运行完美,直至有次上传失败,想看看http的通讯日志,于是加入了HttpLoggingInterceptor来输出日志,设置了level为body,接下来就是坑了。
调用时发现发送requestbody每次都重复,检查代码,没有发现问题,由于是加入log拦截器才导致,于是初步判断是log拦截器的问题,上网搜索无果,自己翻源码看吧,发现
log拦截器中调用了requestbody.writeto到buffer里(其实早该想到,不然日志是怎么打印出来的)
![](https://img.haomeiwen.com/i12439249/7667c7c3379a7d14.png)
于是修改自己继承自requestbody类的writeto方法,将buffer类型的入参只写入buffersink而不写入请求
![](https://img.haomeiwen.com/i12439249/bad1ac1fd6eae362.png)
OK,搞定!
网友评论