yanzhenjie / Kalle

:apple: Http client for Android platform.
https://yanzhenjie.com/Kalle
Apache License 2.0
592 stars 98 forks source link

Fix : response.body can not read again. #97

Open ZuoHailong opened 4 years ago

ZuoHailong commented 4 years ago

严佬,你好!

你的开源库很棒,感谢。

今天在使用 Kalle 的过程中,遇到了一个问题:设定了一个日志拦截器,并将 request.body 在日志中输出:

log.append(String.format(" \nResponse Body: %1$s.", response.body().string()));

之后,再对 request.body 进行数据解析,出现了数据为 null 的情况。

经查找,发现是因为 response.body().string() 方法最终在 StreamBody 类中读取 Response InputStream 的时候出现了bug。原因是对 InputStream 第一次 read 后,指针停留在流数据结束的位置,当对其进行二次 read 时,流数据就是空的了。

我在 StreamBody 类中将 InputStream 包装为了 BufferedInputStream,读取前对流进行 mark,读取后再对其 reset,以备下次读取。

另外,sample module 中 FormPresenter 类报红,应该是 library 行为变化引起,小问题,我顺手改了。

其他的改动,就是 sample 中测试所需的改动了。