Подтвердить что ты не робот

Retrofit 2.0b2: Как получить InputStream из ответа?

Я использую Retrofit 2.0b2. Получив ответ, я попытался получить InputStream из ответа:

Response<JsonNode> response = call.execute();
InputStream is = response.raw().body().byteStream();

но приложение продолжает метать:

java.lang.IllegalStateException: Cannot read raw response body of a converted body.
        at retrofit.OkHttpCall$NoContentResponseBody.source(OkHttpCall.java:184)
        at com.squareup.okhttp.ResponseBody.byteStream(ResponseBody.java:43)
        at ...

Несмотря на то, что ответ верен правильно. Что я здесь делаю неправильно?

4b9b3361

Ответ 1

Если вам нужен необработанный поток, попросите модифицировать, чтобы вернуть OkHttp ResponseBody.

import okhttp3.ResponseBody;
import retrofit2.Response;

Response<ResponseBody> response = call.execute();
try ( ResponseBody responseBody = response.body() ) {
    InputStream is = responseBody.byteStream();
    // ...
}

Не забудьте также обновить интерфейс.

Поскольку тело ответа поддерживается ограниченным ресурсом, объект ResponseBody должен быть закрыт после использования. Поэтому над кодом используется оператор try-with-resources.