2015-02-03 6 views
34

Próbuję uzyskać pewne dane json używając OkHttp i nie może zrozumieć, dlaczego przy próbie logowania do response.body().toString() co ja dostać jest Results:﹕ [email protected]Nie można uzyskać response.body.toString OkHttp za() zwraca ciąg

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

nie wiem co robię źle tutaj. Jak uzyskać ciąg odpowiedzi?

+0

Może it 'sa duplikat [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

Po prostu drukujesz obiekt i twój ślad potwierdzają to. –

+2

przeczytaj dokument. metoda, której szukasz, to 'string' – njzk2

Odpowiedz

115

Używasz funkcji .string() do drukowania odpowiedzi w System.out.println(). Ale w końcu w Log.i() używasz .toString().

Więc proszę użyć .string() na ciele odpowiedzi do wydruku i uzyskać odpowiedzi Twoją prośbę, na przykład:

response.body().string(); 

UWAGA:

  1. .toString(): ta zwraca swój przedmiot w formacie strun.

  2. : To zwraca odpowiedź.

Myślę, że to rozwiąże twój problem ... Dobrze.

+0

jesteś szefem .. dziękuję u – MBH

+0

Dzięki @MBH. Ale ktoś inny głosował na moją odpowiedź. :( –

+0

Awesome! Rozwiązałem to w sekundach – Anu

16

Na wypadek, gdyby ktoś wpadł na tę samą dziwną rzecz, co ja. Biegnę mój kod podczas rozwoju w Debug trybie i najwyraźniej od OKHttp 2.4

..the ciało odpowiedź jest wartością jednorazowym, które mogą być spożywane tylko raz

Więc kiedy w debug tam to wezwanie "za kulisami" od inspektora, a ciało jest zawsze puste. Zobacz: http://square.github.io/okhttp/2.x/okhttp/com/squareup/okhttp/Response.html

+0

Dead link. Użyj tego = => http://square.github.io/okhttp/2.x/okhttp/com/squareup/okhttp/Response.html – mrroboaat

+2

jak nazwać '.string()' bez zużywania treści odpowiedzi? – osrl

+0

Czy kiedykolwiek rozwiązałeś ten problem? – yahya

1

response.body,.string() można spożywać tylko raz. Proszę używać jak poniżej:

String responseBodyString = response.body.string(); 
use the responseBodyString as needed in your application. 
Powiązane problemy