找不到Android Firebase的setter / field

时间:2017-01-14 12:43:33

标签: android firebase firebase-realtime-database pojo

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

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

这是我的数据库:

Database

这是Model Class

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

3 个答案:

答案 0 :(得分:3)

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

-keep class com.example.yourapp.ObjectClass

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

答案 1 :(得分: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>,因为这是它在数据库屏幕截图中的类型。

答案 2 :(得分:0)

为我工作: - keepclassmembers 类com.myPackageName.MyClassName {*; }