Search code examples
androidinstagram-apiokhttphttpsurlconnection

OkHttp Android JSonObject casting exception


When I use OkHttp to post I get a response like this (Instagram api)

{"access_token":"2222222.22222.2222222","user":{"username":"xxx","bio":"","website":"","profile_picture":"https:\/\/instagramimages-a.akamaihd.net\/profiles\/anonymousUser.jpg","full_name":"Test","id":"222222"}}

which I am unable to cast to a JsonObject (I think it is because of the weird way the urls are formatted).

But when I use HttpsUrlConnection everything works fine.

OkHTTP

private final OkHttpClient client = new OkHttpClient();

    public static final MediaType MEDIA_TYPE_MARKDOWN
            = MediaType.parse("text/plain");

//then in a function

 String postBody="client_id="+Application.INSTAGRAM_CLIENT_ID
                    +"&client_secret="+Application.INSTAGRAM_SECRET_KEY
                    +"&grant_type=authorization_code"
                    +"&redirect_uri=" +Application.CALLBACKURL
                    +"&code=" + SharedPrefHelper.getSharedPerferenceData(context, SharedPrefHelper.SHARED_PREFERENCE_KEY_INSTAGRAM_CODE, "");
            Request request = new Request.Builder()
                    .url(Application.TOKENURL)
                    .post(RequestBody.create(MEDIA_TYPE_MARKDOWN,postBody))
                    .build();

I use response.body.string() in the callback method to get the string and cast it to JsonObject.

  if (response.code() == 200) { 
try { 
JSONObject jsonObject = new JSONObject(response.body().string()); 
} catch (JSONException e) { 

 } 
}

How to fix this ? ERROR :

org.json.JSONException: End of input at character 0 of 

Solution

  • You can only use response.body().string() only once. I was calling it twice. First for logging the response and then again for json casting.