【问题标题】:OkHttp Android JSonObject casting exceptionOkHttp Android JSONObject 转换异常
【发布时间】:2015-11-04 16:10:28
【问题描述】:

当我使用 OkHttp 发布时,我会收到这样的回复(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 

【问题讨论】:

  • if (response.code() == 200) { try { JSONObject jsonObject = new JSONObject(response.body().string()); } catch (JSONException e) { Log.i("XXX",e.toString()); } }
  • 这是我得到的字符串... {"access_token":"2222222.22222.2222222","user":{"username":"xxx","bio":"","网站":"","profile_picture":"https:\/\/instagramimages-a.akamaihd.net\/profiles\/anonymousUser.jpg","full_name":"Test","id":"222222"} }
  • 我得到了我在上面发布的字符串,并且在记录字符串之后立即发布。我使用 JSONObject 强制转换.... 带有转义序列的 url 可能有些奇怪?
  • 通过不记录 response.body().string() 并直接将其与 JSONObject 构造函数一起使用 .... 代码有效。也许你可以使用一次。虽然解决了这个问题.... :)

标签: android instagram-api okhttp httpsurlconnection


【解决方案1】:

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

【讨论】:

  • 好的,在我发表评论之前,为什么您的应用仍然有错误?
  • 因为我已经在记录它了。解决方案是您不能使用 response.body().string() 两次。它甚至不是空指针异常。
  • use response.body().string() twice 不会抛出 jsonexception
  • 首先用于记录,然后当我将字符串 (response.body().string()) 与 JsonObject 一起使用时。
【解决方案2】:

第一件事:

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

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

第二件事:

如果您目前使用的是POST,您可能必须尝试使用​​GET,或者使用Vice Versa。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    相关资源
    最近更新 更多