java - Volley JSONException : End of input at character 0 of

标签 java android json rest android-volley

我看到其他人遇到过这个问题,但没有一个帖子能够帮助我。我正在尝试将 Volley 用于我的 REST 调用库,并且当我尝试使用带有 JSON 对象作为参数的 Put 调用时,我收到 error:org.json.JSONException: End of在 的字符 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 对象,但我仍然得到相同的结果。

最佳答案

我也遇到过这个问题。

这不一定是因为您的服务器端出现问题 - 它只是意味着 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

关于java - Volley JSONException : End of input at character 0 of,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32104423/

相关文章:

javascript - NodeJS - 检查 JSON 是否包含子 JSON

java - JSP 中 JSON Web 服务出现跨域错误?

android - 从 API24 向上解压文件名中含有特殊字符的文件

java - 使用 Joda 时间求和持续时间

javascript - 在 Vue js 中获取 JSON 属性时出错

java - 为潜在的并发问题编写证明

java - 如何更改 AlertDialog View 背景颜色?

java - Tez在Hadoop-2.5.2集群上崩溃

javascript - Zk 集成 lightbox.js

java - 检查是否在gradle中正确添加了依赖项