我正在尝试将Firebase数据库中的数据显示给RecylerView,我正在按照本教程official Unity tutorials
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.biodatalist_layout);
ButterKnife.bind(this);
recyclerView = findViewById(R.id.rec);
LinearLayoutManager horizontalLayoutManagaer=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
recyclerView.setLayoutManager(horizontalLayoutManagaer);
mdatabase = FirebaseDatabase.getInstance().getReference().child("Biodata");
mdatabase.keepSynced(true);
FirebaseRecyclerAdapter<BiodataModel, BiodataAdapter> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<BiodataModel, BiodataAdapter>(
BiodataModel.class,
R.layout.biodata_list_row,
BiodataAdapter.class,
mdatabase
)
{
@Override
protected void populateViewHolder(final BiodataAdapter viewHolder,final BiodataModel model,
int position) {
viewHolder.setEmailtext(model.getEmail());
viewHolder.setFullnametext(model.getFullname());
}
};
recyclerView.setAdapter(firebaseRecyclerAdapter);
}
和我的BiodataModel
public class BiodataModel {
public String Fullname,Email,NoTelp,Alamat;
public BiodataModel() {
}
public String getFullname() {
return Fullname;
}
public String getEmail() {
return Email;
}
public String getNoTelp() {
return NoTelp;
}
public String getAlamat() {
return Alamat;
}
public void setFullname(String Fullname) {
this.Fullname = Fullname;
}
public void setEmail(String Email) {
this.Email = Email;
}
public void setNoTelp(String NoTelp) {
this.NoTelp = NoTelp;
}
public void setAlamat(String Alamat) {
this.Alamat = Alamat;
}
}
当我运行此活动时。我收到此错误
com.google.firebase.database.DatabaseException:找到两个getter或者 属性的区分大小写的字段:alamat
我的结构
http://www.programmingviral.com/firebase-recyclerview-tutorial/
我该如何解决这个问题?
答案 0 :(得分:2)
在您的数据库中,您拥有小写的alamat
属性。但是在模型类中,您使用大写字段Alamat
,两者都应该相同。
更改模型类中的字段:
public String alamat;
public String getAlamat() {
return alamat;
}
public void setAlamat(String alamat) {
this.alamat = alamat;
}
答案 1 :(得分:0)
您需要确保数据库中JSON的属性名称与Java类的属性名称完全匹配。现在,您的BiodataModel
类具有(JavaBean)属性alamat
,而数据库包含(JSON)属性Alamat
。由于第一个字符的大小写不同,Firebase在从数据库读取数据时无法在对象上找到匹配的属性。
正如Peter所示,最简单的解决方法是在数据库和代码之间保持完全相同的情况。另一种方法是使用JSON属性的正确拼写/大小写来注释Java代码:
public class BiodataModel {
public String Fullname,Email,NoTelp,Alamat;
public BiodataModel() {
}
@PropertyName("Fullname")
public String getFullname() {
return Fullname;
}
@PropertyName("Email")
public String getEmail() {
return Email;
}
@PropertyName("NoTelp")
public String getNoTelp() {
return NoTelp;
}
@PropertyName("Alamat")
public String getAlamat() {
return Alamat;
}
@PropertyName("Fullname")
public void setFullname(String Fullname) {
this.Fullname = Fullname;
}
@PropertyName("Email")
public void setEmail(String Email) {
this.Email = Email;
}
@PropertyName("NoTelp")
public void setNoTelp(String NoTelp) {
this.NoTelp = NoTelp;
}
@PropertyName("Alamat")
public void setAlamat(String Alamat) {
this.Alamat = Alamat;
}
}
请注意getter和setter是可选的,并且似乎在这里添加不多。由于您的字段已经公开,您还可以使用这个更短的类:
public class BiodataModel {
public String Fullname;
public String Email;
public String NoTelp;
public String Alamat;
}
由于此处的字段名称已经与JSON属性名称精确匹配,因此您无需对其进行注释。但是如果你在这里遇到不匹配的问题,你可以只注释该字段以使事情再次发挥作用。例如:
public class BiodataModel {
@PropertyName("FullName")
public String Fullname;
public String Email;
public String NoTelp;
public String Alamat;
}