web-dev-qa-db-ja.com

レトロフィット2.0b2:応答からInputStreamを取得する方法は?

私はレトロフィット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 ...

応答が正しく返されましたが。私はここで何が間違っているのですか?

13
CatFly

生のストリームが必要な場合は、レトロフィットに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ステートメントを使用します。

21
iagreen