OkHttp Android JSonObject 转换异常

OkHttp Android JSonObject casting exception

当我使用 OkHttp post 时,我得到这样的回复 (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"}}

我无法将其转换为 JsonObject(我认为这是因为 url 的格式化方式很奇怪)。

但是当我使用 HttpsUrlConnection 时一切正常。

OkHTTP

private final OkHttpClient client = new OkHttpClient();

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

//然后在函数中

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

我在回调方法中使用 response.body.string() 来获取字符串并将其转换为 JsonObject。

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

 } 
}

如何解决这个问题? 错误:

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

您只能使用 response.body().string() 一次。我打电话给它两次。首先用于记录响应,然后再次用于 json 转换。

第一件事:

您可能收到空白回复。它不为空,但响应为空。所以你得到这个错误而不是 NullPointerException

您在 JSON 中转换前是否已记录?查过了。

第二件事:

如果您目前使用 POST,您可能需要尝试使用 GET,反之亦然。