我没有发现任何关于它的东西,但是在我调用response.body.charstream()
或string()
之后,下一行将收到一个空正文。 我可以看到它也在做评估。
为什么会发生这种情况,如何处理?
我有一个身份验证器使用charStream来处理一个请求,但是我需要得到响应errorbody来处理我的UseCase中的另一个请求。
嗯,我在okhttp文档中发现了这一点:响应体只能被消耗一次。
所以,我决定克隆缓冲区。 我在HttpLoggingInterceptor(一个由square自己完成类)中找到了一些示例。 现在,它起作用了。
private fun cloneBuffer(body:ResponseBody):String{
val source = body.source()
source.request(Long.MAX_VALUE)
val buffer = source.buffer
return buffer.clone().readString(Charset.forName("UTF-8"))
}
我找到了这一期关于同样的事情。 还有更好的方法!
val responseBody = response.peekBody(Long.MAX_VALUE)
这不会消耗缓冲区。