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

Android应用通过JSON更新在线数据库时字段为空的问题求助

解决Android通过JSON更新数据库时字段为空的问题

我来帮你捋捋这个问题——从你描述的情况来看,核心问题是通过JSON提交更新请求时,所有字段都没有正确传递到后端,导致SQL执行时拿不到有效值,哪怕把匹配条件从ID改成名称也没用,因为根本没有数据能用来匹配或者更新。下面是针对性的排查和解决建议,重点围绕你的saveTask()函数展开:

一、先确认前端JSON数据的构建是否正确

这是最常见的问题根源,先把这一步排查清楚:

  • 检查你在saveTask()里,有没有把EditActivity中用户输入的内容(比如名称、描述、目标ID等字段)正确封装进JSON对象。比如有没有写错字段名(后端SQL用的是task_title,你前端写的是title就会不匹配),或者有没有漏掉某个必填字段。
  • 建议在发送请求前,用日志把构建好的JSON字符串打出来,直观确认数据是否正确:
    JSONObject jsonObject = new JSONObject();
    // 假设这里是你封装字段的代码
    jsonObject.put("task_id", taskId);
    jsonObject.put("task_name", etTaskName.getText().toString().trim());
    
    // 打印JSON日志
    Log.d("EditActivity", "提交的更新数据:" + jsonObject.toString());
    
    如果日志里显示字段都是null或者空字符串,那问题肯定出在前端的数据收集环节——比如你可能没从EditText里取最新值,而是用了初始化的旧对象数据。

二、检查网络请求的参数传递方式

如果JSON数据本身没问题,那就要看请求有没有正确发送:

  • 如果你是用POST请求发送JSON格式的数据,一定要确认请求头设置了Content-Type: application/json,不然后端无法正确解析你的JSON内容,导致拿不到字段值。比如用OkHttp的话,应该这样配置:
    String json = jsonObject.toString();
    RequestBody requestBody = RequestBody.create(
        json,
        MediaType.parse("application/json; charset=utf-8")
    );
    Request request = new Request.Builder()
        .url(你的更新接口URL)
        .post(requestBody)
        .build();
    
  • 如果你是用表单形式提交(不是纯JSON),要确保每个参数的key和后端接收的参数名完全一致,且参数值都正确赋值。

三、后端接收逻辑的验证

虽然你提到SQL输出为空,但也要确认后端有没有正确接收前端传递的参数:

  • 比如用PHP后端的话,要确认是通过file_get_contents('php://input')来获取JSON数据,而不是用$_POST(因为纯JSON请求不会存入$_POST数组):
    $rawData = file_get_contents('php://input');
    $updateData = json_decode($rawData, true);
    
    // 打印接收的数据,确认是否为空
    var_dump($updateData);
    
    如果后端打印的$updateData是空数组或字段都是空,那问题还是回到前端的请求发送环节。

四、saveTask()函数的重点检查点

  • 确认你在调用saveTask()时,传递的是当前编辑页面的最新数据,而不是初始化时的旧数据。比如:
    // 错误示例:用了从Intent获取的旧Task对象,没有取EditText新值
    Task oldTask = getIntent().getParcelableExtra("task");
    jsonObject.put("task_name", oldTask.getName());
    
    // 正确示例:从EditText获取用户输入的最新内容
    String newTaskName = etTaskName.getText().toString().trim();
    jsonObject.put("task_name", newTaskName);
    
  • 检查有没有空值处理逻辑:如果用户未输入某个字段,是不是应该给默认值,或者提示用户填写,而不是直接传递空字符串给后端,避免SQL执行时无有效数据。

按照这个步骤一步步排查,应该能快速定位到字段为空的原因~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:30:57