retrofit - charStream и string () очищают тело после использования - PullRequest
0 голосов
/ 17 июня 2020

Я ничего не нашел об этом, но после того, как я позвонил response.body.charStream() или string(), следующая строка получит пустое тело. Я вижу, что это также происходит при оценке.

Почему это происходит и как с этим справиться?

У меня есть Authenticator, использующий charStream для обрабатывать один запрос, но мне нужно получить ответ errorbody, чтобы обработать другой в моем UseCase.

1 Ответ

0 голосов
/ 17 июня 2020

Ну, я нашел это в 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"))
}

Я нашел эту проблему примерно то же самое. И есть подход получше!

val responseBody = response.peekBody(Long.MAX_VALUE)

это не потребляет буфер.

...