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);