Comment OkHttp obtient-il JSON string?

Solution: C'était une erreur de ma part.

La bonne façon est réponse.corps.)(chaîne de caractères() autre que réponse.corps.toString ()

J'utilise Jetty servlet, L'URL esthttp://172.16.10.126:8789/test/path/jsonpage, chaque fois que la demande de cette URL, il sera de retour

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

il apparaît quand tapez l'url dans un navigateur, malheureusement il montre sorte d'adresse de mémoire autre que la chaîne json lorsque je demande avec Okhttp.

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

Le Okhttp code Im en utilisant:

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

quelqu'un Peut-helpe?

32
demandé sur ardila 2015-01-29 21:04:54

4 réponses

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

exemple ajouter à vos colonnes:

JCol employees  = new employees();
colums.Setid(object.getInt("firstName"));
columnlist.add(lastName);           
73
répondu Newbies 2015-04-16 17:24:01

je suis également confronté au même problème

Utilisez ce code:

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

cela fonctionne bien

10
répondu Venkat Veeravalli 2016-04-14 11:11:27

Comme je l'ai observé dans mon code. Si une fois que la valeur est récupérée du corps de la réponse, son devenir blanc.

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

String str1  = response.body().string();  // BLANK

donc je crois qu'après avoir récupéré une fois la valeur du corps, elle devient vide.

Suggestion: stocker dans String, qui peut être utilisé plusieurs fois.

7
répondu Kuldip Sharma 2017-07-21 19:05:30

j'espère que vous avez réussi à obtenir les données json à partir de la chaîne json.

Eh bien je pense que cela sera d'une aide

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

N'oubliez pas D'utiliser AsyncTask ou SyncAdapter(IntentService), pour éviter d'obtenir un réseau Surmainthreadexception

importez aussi la bibliothèque okhttp dans votre build.gradle

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

4
répondu Kigenyi Phillip 2015-08-01 14:04:15