我已经看到其他人遇到了这个问题,但是没有一个帖子能够帮助我。我正在尝试将Volley用于我的REST调用库,当我尝试将JSON对象作为参数使用Put调用时,我得到了error with: org.json.JSONException: End of input at character 0 of。
error with: org.json.JSONException: End of input at character 0 of
这是代码:
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解析其响应的方式,这意味着创建的子类JsonObjectRequest并将覆盖parseNetworkResponse到下面的示例。
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。
JSONObject