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
相关产品推荐
相关产品推荐

