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 ...
Несмотря на то, что ответ верен правильно. Что я здесь делаю неправильно?
Ответы
Ответ 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.