Android应用JSON解析成功但数据显示为null问题求助
问题根源:字段名不匹配导致Gson解析失败
嘿,我立刻就发现了问题所在——你的EstablishmentData类字段名和返回的JSON键完全不对应,Gson没法把JSON里的数据映射到类的字段上,所以所有字段都变成了null。
看一下对比:
- 你的
EstablishmentData字段:estabName、estabType、estabAddress、estabImage - JSON返回的键:
name、type、address、image
Gson默认是严格按照字段名和JSON键完全一致来解析的,两者不匹配时,Gson就会给字段赋值默认值(String类型就是null)。
两种解决方案
这里有两种简单的修复方式,你可以选一种适合你的:
方案1:用@SerializedName注解映射字段(推荐)
这是最灵活的方法,不用修改现有字段名,只需要给每个字段加上Gson的@SerializedName注解,指定对应的JSON键即可。
修改后的EstablishmentData.java代码:
import com.google.gson.annotations.SerializedName; import java.io.Serializable; public class EstablishmentData implements Serializable { @SerializedName("name") // 对应JSON里的"name"键 public String estabName; @SerializedName("type") // 对应JSON里的"type"键 public String estabType; @SerializedName("address") // 对应JSON里的"address"键 public String estabAddress; @SerializedName("image") // 对应JSON里的"image"键 public String estabImage; }
方案2:直接修改类字段名和JSON键一致
如果你不想用注解,也可以把EstablishmentData的字段名改成和JSON键完全相同:
public class EstablishmentData implements Serializable { public String name; public String type; public String address; public String image; }
注意:这种方法需要同步修改所有用到这些字段的地方,比如EstablishmentAdapter里的establishmentData.name、establishmentData.address等,确保所有引用都一致。
验证修复效果
修改完成后重新运行应用,你会发现Logcat里的Estab Adapter日志不再输出null,RecyclerView也能正常显示数据了。
另外,你可以在EstablishmentFragment的onResponse方法里加一句日志,提前确认解析结果:
if (!establishmentData.isEmpty()) { Log.d(TAG, "解析成功,第一个商家名称:" + establishmentData.get(0).estabName); }
内容的提问来源于stack exchange,提问作者Novice
相关产品推荐
相关产品推荐

