提问者:小点点

改装-使用后清洁车身的charStream和string()


我没有发现任何关于它的东西,但是在我调用response.body.charstream()string()之后,下一行将收到一个空正文。 我可以看到它也在做评估。

为什么会发生这种情况,如何处理?

我有一个身份验证器使用charStream来处理一个请求,但是我需要得到响应errorbody来处理我的UseCase中的另一个请求。


共1个答案

匿名用户

嗯,我在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)

这不会消耗缓冲区。