org.json.JSONException:字符0的输入结束

时间:2016-04-10 20:58:05

标签: android

我使用JSONObject forecast = new JSONObject(response.body(。。string())来获取天气信息,但是android监视器总是显示“org.json.JSONException:输入结束于字符0”。< / p>

$(document).ready(function(){
    $("#controls").click(function(){
        $("#hiddenSideBar").animate({left: '0px'});
    })
});

我使用Log.d(TAG,response.body()。string())来测试它是一个字符串,但是当在JSONObject中预测= new JSONObject(response.body()。string())时,它不行。

4 个答案:

答案 0 :(得分:7)

答案:响应对象应为通用类型 - ResponseBody
请参阅下面的更正代码以供参考。
现在response.body()方法将返回对象ResponseBody

ResponseBody rb = response.body(); 
rb.string();

此处ResponseBody的方法string()返回String个对象,但内部string()方法调用Util.closeQuietly(source);,一旦调用方法string(),响应就为空。

只需删除Log.d(TAG, response.body().string());并按照以下代码操作即可。

参考 - okhttp3.ResponseBody.java

错误: org.json.JSONException:字符0的输入结束

正确的代码:

@Override
public void onResponse(Call call, Response<ResponseBody> response) throws IOException {
   if (response.isSuccessful()) {

      String remoteResponse=response.body().string();
      Log.d(TAG, remoteResponse);
      try {
          JSONObject forecast = new JSONObject(remoteResponse);
      } catch (JSONException e) { 
          e.printStackTrace();
      }
   }
}

答案 1 :(得分:5)

出于某种奇怪的原因,如果您使用.string()&gt; 1次,则回复结果为空。在解析Retrofit响应时,尝试仅使用一次。

有人知道为什么会这样,请改进我的答案。

答案 2 :(得分:1)

有时候问题出在URL上,如果您的网站强制使用 HTTPS ,则必须确保您在 HTTPS URL 中使用了您的APP,反之亦然,如果您的网站不支持 HTTPS ,则必须使用 HTTP URL

答案 3 :(得分:0)

我在“if(response.isSuccessful())”之前移动“String a = response.body()。string()”之后解决了这个问题。