I'm using Retrofit 2.0b2. After getting a response, I tried getting an InputStream from the response by :
Response<JsonNode> response = call.execute();
InputStream is = response.raw().body().byteStream();
but the app keep throwing :
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 ...
Despite the response returned correctly. What am I doing wrong here ?
iagreen
If you want the raw stream, tell retrofit to return an OkHttp ResponseBody.
import okhttp3.ResponseBody;
import retrofit2.Response;
Response<ResponseBody> response = call.execute();
try ( ResponseBody responseBody = response.body() ) {
InputStream is = responseBody.byteStream();
// ...
}
Remember to update your interface, too.
As the response body is backed by a limited resource, the responseBody object must be closed after usage. Therefore above code uses a try-with-resources statement.
来源:https://stackoverflow.com/questions/33030137/retrofit-2-0b2-how-to-get-inputstream-from-the-response