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

特定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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:36:04