okhttpclient new how example java http okhttp embedded-jetty

java - new - ¿Cómo obtiene OkHttp la cadena Json?



request builder() jar (4)

Como observé en mi código. Si una vez que se obtiene el valor del cuerpo de Response, se pone en blanco.

String str = response.body().string(); // {response:[]} String str1 = response.body().string(); // BLANK

Entonces creo que después de traer una vez el valor del cuerpo, se vacía.

Sugerencia: almacénelo en String, que puede usarse muchas veces.

Solución : fue un error de mi parte.

La forma correcta es response.body (). String () que no sea response.body.toString ()

Estoy usando el servlet de Jetty, la URL es http://172.16.10.126:8789/test/path/jsonpage , cada vez que solicite esta URL, volverá

{"employees":[ {"firstName":"John", "lastName":"Doe"}, {"firstName":"Anna", "lastName":"Smith"}, {"firstName":"Peter", "lastName":"Jones"} ]}

Aparece al escribir la url en un navegador, lamentablemente muestra el tipo de dirección de memoria que no sea la cadena json cuando solicito con Okhttp .

TestActivity﹕ com.squareup.okhttp.internal.http.RealResponseBody@537a7f84

El código de Okhttp estoy usando:

OkHttpClient client = new OkHttpClient(); String run(String url) throws IOException { Request request = new Request.Builder() .url(url) .build(); Response response = client.newCall(request).execute(); return response.body().string(); }

¿Alguien puede ayudar?


Espero que haya logrado obtener los datos json de la cadena json.

Bueno, creo que esto será de ayuda

try { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(urls[0]) .build(); Response responses = null; try { responses = client.newCall(request).execute(); } catch (IOException e) { e.printStackTrace(); } String jsonData = responses.body().string(); JSONObject Jobject = new JSONObject(jsonData); JSONArray Jarray = Jobject.getJSONArray("employees"); //define the strings that will temporary store the data String fname,lname; //get the length of the json array int limit = Jarray.length() //datastore array of size limit String dataStore[] = new String[limit]; for (int i = 0; i < limit; i++) { JSONObject object = Jarray.getJSONObject(i); fname = object.getString("firstName"); lname = object.getString("lastName"); Log.d("JSON DATA", fname + " ## " + lname); //store the data into the array dataStore[i] = fname + " ## " + lname; } //prove that the data was stored in the array for (String content ; dataStore ) { Log.d("ARRAY CONTENT", content); }

Recuerde utilizar AsyncTask o SyncAdapter (IntentService) para evitar recibir una excepción NetworkOnMainThreadException

También importe la biblioteca okhttp en su build.gradle

compile ''com.squareup.okhttp:okhttp:2.4.0''


También me enfrento al mismo problema

usa este código:

// notice string() call String resStr = response.body().string().toString(); JSONObject json = new JSONObject(resStr);

Definitivamente funciona


try { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(urls[0]) .build(); Response responses = null; try { responses = client.newCall(request).execute(); } catch (IOException e) { e.printStackTrace(); } String jsonData = responses.body().string(); JSONObject Jobject = new JSONObject(jsonData); JSONArray Jarray = Jobject.getJSONArray("employees"); for (int i = 0; i < Jarray.length(); i++) { JSONObject object = Jarray.getJSONObject(i); } }

Ejemplo agregar a tus columnas:

JCol employees = new employees(); colums.Setid(object.getInt("firstName")); columnlist.add(lastName);