2015-10-09 17 views
12

Retrofit 2.0b2 kullanıyorum.retrofit 2.0b2: InputStream yanıttan nasıl alınır?

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

ancak uygulamanın atma tutmak:

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 ... 

tepki doğru döndürdü rağmen bir cevap elde edildikten sonra ben tarafından yanıttan bir InputStream almak çalıştı. Burada neyi yanlış yapıyorum?

+0

çok açık bir şekilde sorun, otomatik olarak dönüştürülmeyen bir şeyden ziyade "JsonNode" türüne göre bir yanıt almanızdır (çünkü otomatik dönüştürme, akıştan okur ve hiçbir şey bayt akışı için kalmaz) . Yanıt 'nü deneyin? – EpicPandaForce

+0

Tried, nope. Hala 'JsonNode' veya 'Void' veya 'Object' olup olmadığı başarısız oldu. – CatFly

cevap

16

Ham akışı istiyorsanız, retrofit uygulamasına bir OkHttp ResponseBody döndürmesini söyleyin.

import okhttp3.ResponseBody; 
import retrofit2.Response; 

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

Arabiriminizi de güncelleştirmeyi unutmayın.

As the response body is backed by a limited resource, the responseBody object must be closed after usage. Bu nedenle, yukarıdaki kod, kaynakları ile bildirimi kullanır.

+0

Teşekkürler @iagreen, Cevabınız kesinlikle doğrudur. Çalışmamla devam etmek için 'ResponseBody'yi ham bir json'a dönüştürmenin doğru yolunu bulmakta zorlandım. Teşekkür ederim =) –