retrofit-charStream和string()使用后清洗体

问题描述 投票:0回答:1

我什么都没找到,但是在我叫response.body.charStream()string()之后,下一行将收到一个空的正文。我也可以在评估中看到它。

为什么会发生以及如何处理?

我有一个Authenticator使用charStream处理一个请求,但是我需要获取响应错误正文以在UseCase中处理另一个请求。

android retrofit
1个回答
0
投票

嗯,我在okhttp docs中找到了这个:响应正文只能使用一次。

所以,我决定克隆缓冲区。我在HttpLoggingInterceptor中找到了一个示例,该示例由平方自己完成。现在,它正在工作。

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"))
}

我发现issue大约是同一件事。还有更好的方法!

val responseBody = response.peekBody(Long.MAX_VALUE)

这不会占用缓冲区。

© www.soinside.com 2019 - 2024. All rights reserved.