我使用FirebaseRecyclerAdapter使用名为“Spacecraft”的Model类获取“Pro”的所有孩子,现在我想将所有候选者检索为Pro的子项,如“1”
我在“宇宙飞船”中创建了一个公共静态“候选人”,我使用了setter和getters,但仍然是同样的错误
这是我的数据库:
这是模型类
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 回答
我认为只是Firebase和Java上的数据模型不同 .
在您的java类中,
Spacecraft
类具有candidat
类型的candidat
字段 . 但是,在数据库中,candidat
字段实际上是一个嵌套对象(map),包含一个键Key1
,该值是Candidat
结构 .所以,取决于你想要实现的目标:
如果您希望每个航天器只有一个候选人:正确保存数据库对象,因此
{info: "info 1", namecandid: "name 1"}
直接保存在candidat
字段下,而不是更深一级,因此该字段在代码中的类型为Candidat
.如果你想让每个航天器都有一些候选人:而不是
private Candidat candidat
字段,它应该输入Map<String, Candidat>
,因为它是你在数据库截图中的类型 .我有这个错误,但上述解决方案没有解决它 . 希望这种替代解决方案能够帮助其他人 . 如果几乎每个变量都出现了这个错误,那么你可能已经启用了Proguard并且它正在删除未使用的getter和setter方法 . 要解决此问题,请在proguard-rules.pro文件中添加与此类似的行:
其中ObjectClass是存储到Firebase的java对象类的名称 .