2015-02-03 4 views
34

Sto cercando di ottenere alcuni dati JSON utilizzando OkHttp e non riesco a capire perché quando cerco la registrazione della response.body().toString() ciò che ottengo è Results:﹕ [email protected]Non è possibile ottenere response.body.toString di OkHttp() per restituire una stringa

try { 
     URL url = new URL(BaseUrl); 
     OkHttpClient client = new OkHttpClient(); 
     Request request = new Request.Builder() 
       .url(url) 
       .header(/****/) 
       .build(); 

     Call call = client.newCall(request); 
     Response response = call.execute(); 

     **//for some reason this successfully prints out the response** 
     System.out.println("YEAH: " + response.body().string()); 

     if(!response.isSuccessful()) { 
      Log.i("Response code", " " + response.code()); 
     } 

     Log.i("Response code", response.code() + " "); 
     String results = response.body().toString(); 

     Log.i("OkHTTP Results: ", results); 

Log

non so cosa sto facendo male qui. Come ottengo la stringa di risposta?

+0

Forse it'sa duplicato di [http://stackoverflow.com/questions/5769717/how-can-i-get-an-http-response-body-as-a -string-in-java] (http://stackoverflow.com/questions/5769717/how-can-i-get-an-http-response-body-as-a-string-in-java) – Jens

+0

Hai appena stampato un oggetto e la tua traccia lo conferma. –

+2

leggi il documento il metodo che stai cercando è 'stringa' – njzk2

risposta

115

È stata utilizzata la funzione .string() per stampare la risposta in System.out.println(). Ma alla fine nello Log.i() si sta usando .toString().

Quindi, si prega di utilizzare .string() sul corpo di risposta per la stampa e ottenere la risposta di richiesta, come:

response.body().string(); 

NOTA:

  1. .toString(): Ciò restituisce l'oggetto in formato stringa.

  2. .string(): restituisce la risposta.

Penso che questo risolva il problema ... Giusto.

+0

sei il capo ... grazie – MBH

+0

Grazie a @MBH. Ma qualcuno ha votato la mia risposta. :( –

+0

Impressionante! Risolto in pochi secondi – Anu

16

Nel caso in cui qualcuno si imbatta nella stessa strana cosa che ho. Corro il mio codice durante lo sviluppo in Debug modalità e apparentemente dal OKHttp 2,4

..il corpo di risposta è un valore one-shot che può essere consumato solo una volta

Così, quando nel debug di là è una chiamata "dietro la scena" dall'ispettore e il corpo è sempre vuoto. Vedi: http://square.github.io/okhttp/2.x/okhttp/com/squareup/okhttp/Response.html

+0

Collegamento guasto. Usa questo ==> http://square.github.io/okhttp/2.x/okhttp/com/squareup/okhttp/Response.html – mrroboaat

+2

come si chiama '.string()' senza consumare il corpo della risposta? – osrl

+0

Hai mai risolto questo problema? – yahya

1

Il response.body,.string() può essere consumato una sola volta. Si prega di utilizzare, come di seguito:

String responseBodyString = response.body.string(); 
use the responseBodyString as needed in your application. 
Problemi correlati