循环向Map键赋值失败:NoSuchMethodError:方法'[]='被调用在null对象上
问题排查结论
核心故障点
你仅声明了Map<String, List> ret;变量但未做初始化,此时ret的值为null,执行ret[dVal] = lit相当于对空对象调用[]=赋值方法,会直接抛出空指针相关异常,导致第一次循环就终止。
本地Visual Studio运行未触发报错大概率是调试环境未开启严格空安全校验,或是本地Mock测试时
ret被意外赋值过,Android端运行时启用了严格空安全校验,空对象操作会直接抛出异常。
修复方案
直接将ret的声明行改为初始化空Map即可解决核心报错:
Map<String, List> ret = {};
其他潜在隐患优化建议
- 明确
resList的泛型类型,避免jsonDecode返回的dynamic类型后续触发类型校验异常:List<Map<String, dynamic>> resList = jsonDecode(res); - 给
double.parse加异常兜底,避免接口返回非合法数字格式时抛出异常:// 示例写法,取值失败时默认返回0.0 double.tryParse(resList[i]["HappinessLevel"]?.toString() ?? "0") ?? 0.0 - 对
Date字段取值做非空校验,避免空值作为String类型的Map key触发类型异常。
内容的提问来源于stack exchange,提问作者Morb
相关产品推荐
相关产品推荐

