问题:
今天调试网络请求时,logcat显示一个异常信息:
java.lang.IllegalArgumentException: byteCount < 0: -1-----byteCount < 0: -1
据分析,是使用Retrofit+OkHttp进行网络请求时,拦截器拦截请求输出日志时报错。
关键代码为:
ResponseBody rb = response.peekBody(body.contentLength());
其中body.contentLength() = -1;
查资料发现,服务器会随机的对下发的资源做GZip操作,而此时就没有相应的content-length
解决方案:
方案1:在Header中加入:Request.Builder().addHeader("Accept-Encoding", "identity")
方案2:判断body.contentLength的长度。
ResponseBody rb = response.peekBody(body.contentLength() >0 ? body.contentLength() : Integer.MAX_VALUE);
网友评论