You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PUT方法通过WebService更新数据表时遇Volley解析错误求助

解决Volley PUT请求的ParseError与数据库空白字符问题

看起来你遇到了两个关联的问题:Volley解析响应时抛出的JSON输入错误,以及数据库中存入空白字符而非null。我来帮你拆解可能的原因和解决办法:

  • 问题1:ParseError: End of input at character 0
    这个错误的核心是Volley默认期望服务器返回有效的JSON,但你的PUT请求成功后,服务器可能返回了空响应或者非JSON格式的内容(比如纯文本、空字符串),导致Volley无法解析。

解决办法:重写JsonObjectRequest的parseNetworkResponse方法,处理空响应的情况:

@Override
public void onClickUpdate(final int position, ...) {
    // 构建你的PUT请求
    String url = "你的接口地址";
    JSONObject jsonBody = new JSONObject();
    // 填充请求体...

    JsonObjectRequest putRequest = new JsonObjectRequest(Request.Method.PUT, url, jsonBody,
            response -> {
                // 处理更新成功的逻辑
                Toast.makeText(context, "更新成功", Toast.LENGTH_SHORT).show();
            },
            error -> {
                // 处理错误
                Log.e("UpdateError", error.getMessage(), error);
            }) {
        @Override
        protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
            try {
                String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
                // 当响应内容为空时,返回空的JSONObject避免解析错误
                if (TextUtils.isEmpty(jsonString)) {
                    return Response.success(new JSONObject(), HttpHeaderParser.parseCacheHeaders(response));
                }
                // 正常情况调用父类解析
                return super.parseNetworkResponse(response);
            } catch (UnsupportedEncodingException | JSONException e) {
                return Response.error(new ParseError(e));
            }
        }
    };

    // 将请求加入Volley队列
    Volley.newRequestQueue(context).add(putRequest);
}
  • 问题2:数据库存入空白字符而非null
    这说明你发送给服务器的是空字符串(""),而不是JSON的null值。如果期望数据库存储null,需要在构建请求体时区分空字符串和null:
// 构建请求体时的字段处理
String fieldValue = getFieldValue(position); // 你的字段值获取逻辑
try {
    if (TextUtils.isEmpty(fieldValue)) {
        // 发送JSON null而非空字符串
        jsonBody.put("target_field", JSONObject.NULL);
    } else {
        jsonBody.put("target_field", fieldValue);
    }
} catch (JSONException e) {
    e.printStackTrace();
}

另外,也要确认服务器端的接口逻辑:是否会将接收到的空字符串转换为null存入数据库。如果服务器没有做这个转换,即使客户端发了null,也可能被处理成空白字符,这时候需要和后端同学协作调整接口逻辑。

  • 额外调试建议
    用Android Studio的Network Inspector或者抓包工具查看PUT请求的实际内容和服务器响应:
    1. 确认请求体中的字段是null还是空字符串
    2. 确认服务器返回的响应内容是否为空或非JSON格式
      这能帮你快速定位问题出在客户端还是服务器端。

内容的提问来源于stack exchange,提问作者Enrique Espinosa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:54:03