首页 文章

找不到Android Firebase的setter / field

提问于
浏览
1

我使用FirebaseRecyclerAdapter使用名为“Spacecraft”的Model类获取“Pro”的所有孩子,现在我想将所有候选者检索为Pro的子项,如“1”

我在“宇宙飞船”中创建了一个公共静态“候选人”,我使用了setter和getters,但仍然是同样的错误

这是我的数据库:

Database

这是模型类

public class Spacecraft{
    private String name;
    private String desc;
    private String last;
    private candidat candidat;

    public Spacecraft.candidat getCandidat() {
        return candidat;
    }

    public void setCandidat(Spacecraft.candidat candidat) {
        this.candidat = candidat;
    }

    public Spacecraft() {
    }
    public String getName() {

        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getLast() {
        return last;
    }

    public void setLast(String last) {
        this.last = last;
    }
    public static class candidat{

        private String info;
        private String namecandid;
        public candidat(){}
        public String getInfo() {
            return info;
        }

        public void setInfo(String info) {
            this.info = info;
        }

        public String getNamecandid() {
            return namecandid;
        }

        public void setNamecandid(String namecandid) {
            this.namecandid = namecandid;
        }
    }
}

这是我的FirebaseRecyclerAdapter代码

@Override
    protected void onStart() {
        super.onStart();
        FirebaseRecyclerAdapter<Spacecraft, candidatviewholder> firebaseRecyclerAdapter  = new FirebaseRecyclerAdapter<Spacecraft, candidatviewholder>(
                Spacecraft.class,
                R.layout.candidat,
                candidatviewholder.class,
                query){
                        @Override
                        protected void populateViewHolder(candidatviewholder viewHolder, Spacecraft model, int position) {
                            viewHolder.setName1(model.getCandidat().getNamecandid());
                            viewHolder.setInfo1(model.getCandidat().getInfo());
                        }
                    };
        rv.setAdapter(firebaseRecyclerAdapter);
    }

错误:

在com.example.ilyas.evotingapplication.Spacecraft $ candidat上找不到key1的setter / field

2 回答

  • 1

    我认为只是Firebase和Java上的数据模型不同 .

    在您的java类中, Spacecraft 类具有 candidat 类型的 candidat 字段 . 但是,在数据库中, candidat 字段实际上是一个嵌套对象(map),包含一个键 Key1 ,该值是 Candidat 结构 .

    所以,取决于你想要实现的目标:

    • 如果您希望每个航天器只有一个候选人:正确保存数据库对象,因此 {info: "info 1", namecandid: "name 1"} 直接保存在 candidat 字段下,而不是更深一级,因此该字段在代码中的类型为 Candidat .

    • 如果你想让每个航天器都有一些候选人:而不是 private Candidat candidat 字段,它应该输入 Map<String, Candidat> ,因为它是你在数据库截图中的类型 .

  • 3

    我有这个错误,但上述解决方案没有解决它 . 希望这种替代解决方案能够帮助其他人 . 如果几乎每个变量都出现了这个错误,那么你可能已经启用了Proguard并且它正在删除未使用的getter和setter方法 . 要解决此问题,请在proguard-rules.pro文件中添加与此类似的行:

    -keep class com.example.yourapp.ObjectClass
    

    其中ObjectClass是存储到Firebase的java对象类的名称 .

相关问题