特定Adapter中从Firebase获取数据返回null的问题如何修复?
问题根源
Firebase Realtime Database 反序列化模型类时,会严格按照JavaBean规范匹配字段名和Getter/Setter方法,你遇到的空值问题核心是字段映射不匹配。
修复步骤
1. 修复isVideo字段空值问题
你的Post类中isVideo字段的Getter方法不符合JavaBean规范:布尔类型字段名为isVideo时,Firebase会自动匹配isVideo()格式的Getter方法,你目前写的getVideo()会被识别为对应video字段,和数据库里的isVideo字段匹配失败,导致反序列化后为null。
修改方案二选一:
方案A:调整Getter/Setter符合规范
将Post类中isVideo对应的Getter/Setter修改为:
public Boolean isVideo() { return isVideo; } public void setVideo(Boolean video) { isVideo = video; }
建议直接把Boolean包装类改为基本类型boolean,这样默认值为false,永远不会出现空值
方案B:强制指定字段映射名
如果不想改方法名,直接给字段加@PropertyName注解明确绑定数据库字段:
@PropertyName("isVideo") private Boolean isVideo; @PropertyName("isVideo") public Boolean getVideo() { return isVideo; } @PropertyName("isVideo") public void setVideo(Boolean video) { isVideo = video; }
2. 修复ingrediantsList字段空值问题
同样是字段映射不匹配导致,检查你的Firebase数据库中存储的食材列表字段名,和Post类中的ingrediantsList是否完全一致(大小写、拼写都要完全相同):
- 如果数据库中字段名和类字段名不一致,给类字段加注解绑定即可:
@PropertyName("数据库中实际的食材列表字段名") private ArrayList<String> ingrediantsList;
- 也可以直接修改类字段名和数据库完全一致。
3. 修复接收端逻辑问题
你目前用getBooleanExtra接收isVideo,这个方法返回的是基本类型boolean,就算传递的是null值,也会返回你设置的默认值false,自动装箱后的Boolean永远不会为null,你写的if (isVideo != null)判断完全无效。
修改接收代码:
// 改用getSerializableExtra接收包装类Boolean isVideo = (Boolean) getIntent().getSerializableExtra("isVideo"); if (isVideo != null && isVideo) { // 原有逻辑不变 }
内容的提问来源于stack exchange,提问作者SSS
相关产品推荐
相关产品推荐

