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

无法从Firebase快照提取数据,调用getTituloFilme返回null是什么原因

问题原因

Firebase Realtime Database 对快照数据和自定义类做映射时,默认要求类的字段名、Getter/Setter 命名和数据库中的键名严格匹配,你当前的命名存在两处不匹配:

  • 数据库中电影名称的键为Titulo,但Filme类中对应的字段名为tituloFilme,二者名称完全不对应
  • 剩下两个字段的首字母大小写不匹配:数据库键为Genero/Ano,类中字段为genero/ano

你之前直接调用setValue修改数据能成功,是因为你手动指定了数据库键名Titulo,没有走类到数据库的序列化映射逻辑,所以不受命名不匹配的影响。

解决方法

方案1:修改类命名和数据库完全对齐

直接调整Filme类的字段、Getter/Setter命名和数据库键完全一致即可:

public class Filme {
    private String Titulo;
    private String Genero;
    private String Ano;

    public Filme(){

    }

    public Filme(String Titulo, String Genero, String Ano){
        this.Titulo = Titulo;
        this.Genero = Genero;
        this.Ano = Ano;
    }
    public String getTitulo() {
        return Titulo;
    }

    public void setTitulo(String Titulo) {
        this.Titulo = Titulo;
    }

    public String getGenero() {
        return Genero;
    }

    public void setGenero(String Genero) {
        this.Genero = Genero;
    }

    public String getAno() {
        return Ano;
    }

    public void setAno(String Ano) {
        this.Ano = Ano;
    }
}

方案2:使用@PropertyName注解指定映射关系

如果不想修改现有类的命名规范,可以给字段添加Firebase提供的@PropertyName注解,手动指定每个字段对应的数据库键:

import com.google.firebase.database.PropertyName;

public class Filme {
    @PropertyName("Titulo")
    private String tituloFilme;
    @PropertyName("Genero")
    private String genero;
    @PropertyName("Ano")
    private String ano;

    // 原有构造方法、Getter、Setter无需修改
    public Filme(){

    }

    public Filme(String tituloFilme, String genero, String ano){
        this.tituloFilme = tituloFilme;
        this.genero = genero;
        this.ano = ano;
    }
    public String getTituloFilme() {
        return tituloFilme;
    }

    public void setTituloFilme(String tituloFilme) {
        this.tituloFilme = tituloFilme;
    }

    public String getGenero() {
        return genero;
    }

    public void setGenero(String genero) {
        this.genero = genero;
    }

    public String getAno() {
        return ano;
    }

    public void setAno(String ano) {
        this.ano = ano;
    }
}

内容的提问来源于stack exchange,提问作者user16469617

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:15:03