How does OkHttp get Json string?

后端 未结 5 1850
不知归路
不知归路 2020-12-02 08:50

Solution: It was a mistake on my side.

The right way is response.body().string() other than response.body.toString

相关标签:
5条回答
  • 2020-12-02 09:30
    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);
        }
    }
    

    Example add to your columns:

    JCol employees  = new employees();
    colums.Setid(object.getInt("firstName"));
    columnlist.add(lastName);           
    
    0 讨论(0)
  • 2020-12-02 09:31

    I am also faced the same issue

    use this code:

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

    it definitely works

    0 讨论(0)
  • 2020-12-02 09:34

    Below code is for getting data from online server using GET method and okHTTP library for android kotlin...

    Log.e("Main",response.body!!.string())

    in above line !! is the thing using which you can get the json from response body

    val client = OkHttpClient()
                val request: Request = Request.Builder()
                    .get()
                    .url("http://172.16.10.126:8789/test/path/jsonpage")
                    .addHeader("", "")
                    .addHeader("", "")
                    .build()
                client.newCall(request).enqueue(object : Callback {
                    override fun onFailure(call: Call, e: IOException) {
                        // Handle this
                        Log.e("Main","Try again latter!!!")
                    }
    
                    override fun onResponse(call: Call, response: Response) {
                        // Handle this
                        Log.e("Main",response.body!!.string())
                    }
                })
    
    0 讨论(0)
  • 2020-12-02 09:36

    I hope you managed to obtain the json data from the json string.

    Well I think this will be of help

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

    Remember to use AsyncTask or SyncAdapter(IntentService), to prevent getting a NetworkOnMainThreadException

    Also import the okhttp library in your build.gradle

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

    0 讨论(0)
  • 2020-12-02 09:52

    As I observed in my code. If once the value is fetched of body from Response, its become blank.

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

    So I believe after fetching once the value from body, it become empty.

    Suggestion : Store it in String, that can be used many time.

    0 讨论(0)
提交回复
热议问题