okhttp new JsonObject from Response

12,960

Since the call response.body().string() will read the content from the return stream then close it, so the second time you call it. It will return nothing :\

Better way:

if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); 
    String responseData = response.body().string();
    Log.e(TAG, "onResponse: " + responseData);
    try {
        JSONObject jsonObject = new JSONObject(responseData);
        // Do something here 
        } catch (JSONException e) {
...}
Share:
12,960
Shuai Wang
Author by

Shuai Wang

Updated on July 26, 2022

Comments

  • Shuai Wang
    Shuai Wang almost 2 years

    I am trying to use OKHttp and https://github.com/hongyangAndroid/okhttp-utils to implement Login function, but I don't know how to create new a JsonObject use Response in the Callback.

      OkHttpUtils.post()
                .url(url)
                .addParams("phone", "18681873411")
                .addParams("password", "18681873411")
                .build()
                .execute(new Callback() {
                    @Override
                    public Object parseNetworkResponse(Response response) throws Exception {
                        Log.i("ws","---->>parseNetworkResponse" + response.body().string());
    
    
                        JSONObject jsonObj = null;
                        try {
                            jsonObj = new JSONObject(response.body().string());
                        } catch (JSONException e) {
                            Log.i("ws","---->>JSONException");
                            e.printStackTrace();
                        } catch (IOException e) {
                            Log.i("ws","---->>IOException");
                            e.printStackTrace();
                        }
                        Log.i("ws","---->>111 :" );
                        String opCode = jsonObj.getString("OpCode");
                        String message = jsonObj.getString("Message");
                        Log.i("ws","---->>111 opCode:" + opCode);
                        Log.i("ws","---->>111 Message:" + message);
                        JSONObject result = new JSONObject();
                        result.put("qrcode",opCode);
                        result.put("message", message);
                        return result;
    
                    }
    
                    @Override
                    public void onError(Call call, Exception e) {
                        Log.i("ws","---->>onError" + e);
                    }
    
                    @Override
                    public void onResponse(Object response) {
                        Log.i("ws","---->>onResponse" + response.toString());
                    }
                });
    

    and the error information:

    parseNetworkResponse{"OpCode":0,"Message":"登陆成功","Other":{"id":1,"name":null,"phone":"18681873411","QQuid":null,"weixinuid":null,"gender":null,"age":null,"credits":null,"address":null,"signature":null,"imageurl":null,"password":"18681873411","created_at":"2016-05-19T17:05:02.000Z","updated_at":"2016-05-19T17:05:02.000Z"}}
    05-20 11:29:01.953 13496-13621/com.smartspace.magicmirror I/ws: ---->>IOException
    05-20 11:29:01.954 13496-13621/com.smartspace.magicmirror I/ws: ---->>111 :
    05-20 11:29:01.955 13496-13496/com.smartspace.magicmirror I/ws: ---->>onErrorjava.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.getString(java.lang.String)' on a null object reference