Android注册功能JSON转换异常:无法写入数据库问题排查求助
Android注册程序JSONException排查与修复
问题概述
注册流程抛出org.json.JSONException,错误信息为java.lang.String的Value <br无法转换为JSONObject,导致数据无法写入数据库,疑似MainActivity存在问题。
核心原因
该异常表明客户端收到的响应不是合法JSON格式,而是包含HTML换行标签<br>的文本内容——大概率是后端Api.php执行出错,输出了PHP原生错误提示(带HTML格式),而非预期的JSON响应。
排查修复步骤
1. 优先排查后端Api.php
- 直接在浏览器/接口调试工具中调用注册接口,传入测试参数,查看返回内容:
- 如果返回带
<br>的错误文本(比如PHP语法错误、数据库连接失败提示),先修复后端问题:- 给
Api.php添加全局错误捕获,确保无论成功/失败都输出合法JSON:<?php header('Content-Type: application/json'); // 强制设置响应头为JSON类型 try { // 数据库连接、注册逻辑代码 $result = ["success" => true, "msg" => "注册成功"]; echo json_encode($result); } catch (Exception $e) { $error = ["success" => false, "msg" => $e->getMessage()]; echo json_encode($error); } ?> - 检查数据库连接语句、SQL语法是否正确,避免因后端报错输出非JSON内容。
- 给
- 如果返回带
2. 检查MainActivity的网络请求处理
- 在解析响应前,先打印完整响应内容,确认是否包含HTML标签:
// 以Volley请求回调为例 @Override public void onResponse(String response) { Log.d("REG_RESPONSE", "完整响应: " + response); // 打印响应日志 try { JSONObject jsonResp = new JSONObject(response); // 后续注册成功/失败逻辑 } catch (JSONException e) { Log.e("JSON_PARSE_ERROR", "非法响应内容: " + response); // 提示用户服务器异常 } } - 确保请求头设置正确,让后端能正确解析参数:
// 示例OkHttp请求的请求头设置 RequestBody formBody = new FormBody.Builder() .add("username", etUsername.getText().toString()) .add("password", etPassword.getText().toString()) .build(); Request request = new Request.Builder() .url(REGISTER_API_URL) .post(formBody) .addHeader("Content-Type", "application/x-www-form-urlencoded") .build();
3. SharedPrefManager校验
确认SharedPrefManager仅在解析合法JSON后存储用户数据,避免传入未处理的错误响应字符串。
错误提示说明
错误截图显示异常栈指向JSON解析步骤,明确提示无法将包含<br>标签的字符串转换为JSONObject,进一步验证了响应内容非法的结论。
内容的提问来源于stack exchange,提问作者Syarief Rahman
相关产品推荐
相关产品推荐

