当前位置: 首页 > 知识库问答 >
问题:

凌空JSONException:输入在的字符0处结束

万英武
2023-03-14

我见过其他人遇到这个问题,但没有一个帖子能够帮助我。我试图在REST调用库中使用Volley,当我试图使用带有JSON对象的Put调用作为参数时,我得到了错误:org。json。JSONException:输入结束于的字符0处。

代码如下:

protected void updateClientDeviceStatus(Activity activity, final int status) {
    JSONObject jsonParams = new JSONObject();
    try {
        jsonParams.put("statusId", String.valueOf(status));
    } catch (JSONException e1) {
        e1.printStackTrace();
    }
    Log.i(LOG_TAG, "json: " + jsonParams.toString());

    String url = Constants.API_URL + "client/device/" + getDeviceId();
    // Request a response from the provided URL.
    JsonObjectRequest request = new JsonObjectRequest
            (Request.Method.PUT, url, jsonParams, new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    Log.i(LOG_TAG, "updated client status");
                    Log.i(LOG_TAG, "response: " + response.toString());
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.i(LOG_TAG, "error with: " + error.getMessage());
                    if (error.networkResponse != null)
                        Log.i(LOG_TAG, "status code: " + error.networkResponse.statusCode);


                }
            }) {

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String>  params = new HashMap<String, String>();
            params.put("User-Agent", getUserAgent());
            params.put("X-BC-API", getKey());

            return params;
        }

        @Override
        public String getBodyContentType() {
            return "application/json";
        }
    };

    request.setRetryPolicy(new DefaultRetryPolicy(20000, 3, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    MySingleton.getInstance(activity).addToRequestQueue(request);
    }
}

jsonParams日志显示:

json: {"statusId":"1"}

有没有其他我错过的场景?看起来请求无法解析JSON对象。我甚至尝试创建一个HashMap,然后用它创建一个JSON对象,但仍然得到了相同的结果。

共有3个答案

侯沈义
2023-03-14

在我的情况下,这只是我发送的请求(POST)不正确。我交叉检查了我的字段并注意到存在不匹配,服务器希望得到这样的错误-

吕永嘉
2023-03-14

可能没有意义,但除了添加内容类型的标头之外,其他任何东西都不适合我

mHeaders.put("Content-Type", "application/json");
松新
2023-03-14

我也遇到过这个问题。

这不一定是因为服务器端有问题——它只是意味着JsonObjectRequest的响应是空的。

很可能是服务器应该向您发送内容,而其响应为空是一个错误。然而,如果服务器的行为应该是这样的,那么为了解决这个问题,您需要更改JsonObjectRequest解析其响应的方式,这意味着创建一个JsonObjectRequest的子类,并将parseNetworkResponse覆盖到下面的示例中。

    @Override
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
        try {
            String jsonString = new String(response.data,
                    HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET));

            JSONObject result = null;

            if (jsonString != null && jsonString.length() > 0)
                 result = new JSONObject(jsonString);

            return Response.success(result,
                    HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (JSONException je) {
            return Response.error(new ParseError(je));
        }
    } 

请记住,使用此修复程序,并且在服务器响应为空的情况下,请求回调将返回一个空引用来代替JSONObject

 类似资料:
  • 以下是所有的错误: 下面是我的代码:

  • 问题内容: 我正在尝试从服务器获取JSON值。我不知道我的代码有什么问题。我正在使用,这是我的代码在 码: 这是logcat 这是 JSON 格式 问题答案: 您可能会得到一个空白的答复。它不为null,但 jsontext 为空。因此,您将收到此错误,而不是Nullpointer异常 您是否正在向服务器发送正确的参数。还要检查url是否响应POST请求。

  • 问题内容: 我已经看到其他人遇到了这个问题,但是没有一个帖子能够帮助我。我正在尝试将Volley用于我的REST调用库,当我尝试将JSON对象作为参数使用Put调用时,我得到了。 这是代码: jsonParams日志显示: 我还有其他设置吗?看来请求无法解析JSON对象。我什至尝试创建一个HashMap,然后使用它创建一个JSON对象,但是我仍然得到相同的结果。 问题答案: 我也遇到了这个问题。

  • 问题内容: 我在php中有一个API,可以JSON格式发送数据。我编写了以下代码,当我使用wifi时可以正常工作。但是,当我想在3g上从API下载数据时,会收到以下异常:JSONException:在字符0的输入结束 我不知道为什么它可以在wifi上工作,但不能在移动互联网上使用。我的代码: 有人可以帮助我吗? 问题答案: 您可能会得到一个空白的答复。它不为null,但响应为空。因此,您将收到此错

  • 我正在尝试登录应用程序,但我一直遇到“解析数据org.json.JSONException错误:在字符0的输入结束” 我的登录名。java看起来像这样 公共类登录扩展活动实现OnClickListener{私有EditText用户,pass; 私有静态最终字符串LOGIN_URL="my url"; //从真实服务器进行测试: } } 我的JSONParser。java如下所示:` 公共类JSON

  • 我有一个凌空的JSONRequest,它被卡住了,因为来自服务器的响应不是有效的JSON(它是html)。 如何才能优雅地处理此错误?我有以下实现: 然而,当我发送请求并得到无效的JSON响应时,不会调用onErrorResponse。相反,我得到了一个例外 整个应用程序崩溃了。 我设法将该错误跟踪到JsonObjectRequest.java类中的以下行: 调用的行是:返回响应。错误(new P