私はレトロフィット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 ...
応答が正しく返されましたが。私はここで何が間違っているのですか?
生のストリームが必要な場合は、レトロフィットに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ステートメントを使用します。