Flutter注册新用户时触发FormatException异常的问题求助
Flutter注册新用户时触发FormatException异常的问题求助
大家好,我在开发Flutter应用的用户注册功能时,一直碰到FormatException异常,折腾了好久没找到问题所在,想请各位帮忙分析下。
先贴出我的核心代码:
validateUserEmail() async { try { var res = await http.post( Uri.parse(API.validateEmail), body: { 'user_email': emailController.text.trim(), }, ); if(res.statusCode == 200) //The HTTP 200 OK success status response code indicates that the request has succeeded. { var resBodyOfValidateEmail = jsonDecode(res.body); if(resBodyOfValidateEmail['emailFound'] == true) { Fluttertoast.showToast(msg: "Email already in use."); } else { //register and save new user to database registerAndSaveUserRecord(); } } } catch(e) { print(e.toString()); Fluttertoast.showToast(msg: e.toString()); } } registerAndSaveUserRecord() async { User userModel = User( 1, nameController.text.trim(), emailController.text.trim(), passwordController.text.trim(), ); try { var res = await http.post( Uri.parse(API.signUp), body: userModel.toJson(), ); if(res.statusCode == 200) { var resBodyOfSignUp = jsonDecode(res.body); if(resBodyOfSignUp['success'] == true) { Fluttertoast.showToast(msg: "You have signup successfully."); } else { Fluttertoast.showToast(msg: "Error try again"); } } } catch(e) { print(e.toString()); Fluttertoast.showToast(msg: e.toString()); } }
问题描述:当我尝试注册新用户时,Android Studio里会抛出FormatException(我截图标记了疑似出问题的区域,但这里没法展示截图)。我已经仔细检查过代码,没发现拼写错误或者语法问题,实在搞不清哪里出问题了。
有没有大佬能帮我梳理下可能的原因,或者给一些排查的方向?
补充排查建议(结合常见问题整理)
- 先确认API返回的内容是否为有效JSON:
jsonDecode()抛出FormatException最常见的原因就是后端返回的不是合法JSON。可以在调用jsonDecode前先打印返回的body内容,看看是不是有HTML错误页面、多余字符或者格式错误:// 在validateUserEmail里添加打印 print("Validate Email Response: ${res.body}"); var resBodyOfValidateEmail = jsonDecode(res.body); - 检查API端点的正确性:确认
API.validateEmail和API.signUp的URL是否完全正确,有没有少写路径、域名错误或者HTTP/HTTPS协议写错的情况,错误的URL可能返回404页面(HTML格式),导致解析失败。 - 处理非200状态码的情况:目前代码只处理了
statusCode == 200的场景,如果后端返回400、500等错误状态码,返回的内容大概率不是JSON,这时候调用jsonDecode就会报错。建议补充非200状态的处理逻辑:if(res.statusCode == 200) { // 现有解析逻辑 } else { print("请求失败,状态码:${res.statusCode},返回内容:${res.body}"); Fluttertoast.showToast(msg: "请求出错,请稍后重试"); } - 检查User模型的toJson方法:确保
userModel.toJson()转换后的参数格式完全符合后端API的要求,有没有字段名拼写错误、数据类型不匹配的情况,这些都可能导致后端返回非JSON的错误提示。 - 查看完整的异常信息:catch块里直接把
e.toString()显示在toast里可能信息不全,建议在控制台打印完整的异常栈信息,比如print("注册出错:$e");,这样能看到更详细的错误细节,帮助定位问题。
备注:内容来源于stack exchange,提问作者Jonar _254
相关产品推荐
相关产品推荐

