Retrofit2获取JSON数据返回null,Login类取值为空求助
解决Android中Login实体类解析JSON返回null的问题
Hey,我看你在Android项目里用jsonschema2pojo生成了Login实体类,但解析JSON后字段总是返回null,这确实挺闹心的,我帮你梳理几个最常见的排查方向,一步步来解决:
1. 先确认JSON数据和实体类的键名完全匹配
首先要盯紧你的原始JSON数据,确保里面的键名和实体类@SerializedName注解里的值完全一致,包括大小写、下划线这些细节!比如如果JSON里是"Id_User"而你注解写的是"id_user",那肯定匹配不上。举个正确的JSON示例应该是这样的:
{ "id_user": "1001", "id_role": "2", "username": "kharisma", "password": "your_password", "email": "kharisma@example.com" }
2. 检查解析库的配置和使用是否正确
如果你用的是Gson(最常用的JSON解析库之一),要注意这几点:
- 别禁用
@SerializedName的支持:默认Gson是支持这个注解的,但如果自定义了GsonBuilder,别加错配置,比如excludeFieldsWithoutExposeAnnotation()这个选项——如果加了它,那所有需要被解析的字段必须都带有@Expose注解,你代码里的email字段好像没写完,要检查是不是漏加了@Expose或者字段定义不完整。 - 解析代码要写对:确保你是把JSON字符串解析成单个
Login对象,而不是数组。正确的解析代码应该是这样:
// 从字符串解析 String jsonResponse = "你的JSON返回字符串"; Login login = new Gson().fromJson(jsonResponse, Login.class); // 从网络请求的ResponseBody解析 ResponseBody responseBody = ...; // 网络请求返回的响应体 Login login = new Gson().fromJson(responseBody.charStream(), Login.class);
要是你的JSON返回的是数组(比如[{"id_user": "..."}]),那得解析成List<Login>才行,不然肯定会得到null或者解析异常。
3. 检查实体类的基础结构
- 确保生成的
Login类有无参构造函数:Gson解析的时候需要用到无参构造,jsonschema2pojo默认会生成,但如果你手动修改过类,可能不小心删掉了,这会导致解析失败。 - 确认getter方法正确:你得为每个字段生成对应的getter方法(比如
getIdUser()、getUsername()),很多时候拿到null只是因为没调用正确的getter,或者getter方法名写错了。
4. 回溯jsonschema2pojo的生成配置
想想你用jsonschema2pojo的时候有没有选对配置:
- 是不是选了正确的JSON库?比如你用Gson解析,但生成的时候选了Jackson,那注解肯定不兼容,解析就会出问题。
- 有没有勾选影响注解生成的选项?比如是否开启了"Use @SerializedName"这类选项,确保生成的注解是符合你所用解析库要求的。
调试小技巧:快速定位问题
可以在代码里加几句日志,把原始JSON和解析后的对象再转成JSON打印出来,看看哪些字段丢失了:
Log.d("JSON_DEBUG", "原始JSON内容: " + jsonResponse); Login login = new Gson().fromJson(jsonResponse, Login.class); Log.d("JSON_DEBUG", "解析后转JSON: " + new Gson().toJson(login));
这样能直观看到哪些字段没有被正确解析,方便你针对性排查。
内容的提问来源于stack exchange,提问作者Kharisma
相关产品推荐
相关产品推荐

