You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:36:16