Android Java中使用Gson解析JSON为UnitRes对象失败求助
问题排查与解决
以下是导致Gson解析失败的可能原因及对应解决方法:
1. 缺少无参构造函数
Gson通过反射实例化实体类时,依赖类的无参构造函数。如果UnitRes或Unit类定义了带参构造但未显式声明无参构造,Java不会自动生成默认无参构造,导致Gson无法实例化对象。
解决方法:给两个类都显式添加无参构造:
public class UnitRes{ private List<Unit> units; private int success; private String loc; // 显式无参构造 public UnitRes() {} // getters & setters } public class Unit{ private int id; private String unit_name; private String created_at; private String updated_at; // 显式无参构造 public Unit() {} // getters & setters }
2. 解析时错误使用TypeToken
UnitRes是普通实体类,并非泛型集合类型,不需要使用TypeToken,直接传入UnitRes.class即可完成解析。错误的TypeToken使用可能引发解析逻辑异常。
修改解析代码:
Gson gson = new Gson(); UnitRes res = gson.fromJson(response, UnitRes.class);
3. 检查JSON字符串的有效性
确保response变量存储的是完整、格式正确的JSON字符串,没有多余的前缀、后缀或转义错误。可以先打印response内容,用本地JSON校验工具验证格式是否合规。
4. 混淆规则问题
如果项目开启了代码混淆,Gson会因为实体类字段名被混淆而无法匹配JSON键值对。需要在混淆配置文件(proguard-rules.pro)中添加规则,保留实体类的字段和结构:
# 替换为你的实体类实际包路径 -keep class com.your.package.UnitRes { *; } -keep class com.your.package.Unit { *; }
内容的提问来源于stack exchange,提问作者Eliasu
相关产品推荐
相关产品推荐

