Android Firebase:我可以检索键,但不能检索值
我正在尝试使用以下代码检索快照的值:Android Firebase:我可以检索键,但不能检索值,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在尝试使用以下代码检索快照的值: mDB = FirebaseDatabase.getInstance().getReference("Salarie"); mDB.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot snapshot : dataS
mDB = FirebaseDatabase.getInstance().getReference("Salarie");
mDB.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Toast.makeText(getApplication(),snapshot.getKey(),Toast.LENGTH_SHORT).show();
Salarié salarié = snapshot.getValue(Salarié.class);
Toast.makeText(getApplication(),salarié.getDepartement(),Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
我的javaBean如下所示:
public class Salarié {
private String departement;
private String nom;
private String prenom;
public void setNom(String nom) {
this.nom = nom;
}
public String getNom() {
return nom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public String getPrenom() {
return prenom;
}
public void setDepartement(String département) {
this.departement = département;
}
public String getDepartement() {
return departement;
}
}
"40" : {
"Departement" : "EXEMPLE",
"Nom" : "EX1",
"Prenom" : "EX2"
},
我的数据库如下所示:
public class Salarié {
private String departement;
private String nom;
private String prenom;
public void setNom(String nom) {
this.nom = nom;
}
public String getNom() {
return nom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public String getPrenom() {
return prenom;
}
public void setDepartement(String département) {
this.departement = département;
}
public String getDepartement() {
return departement;
}
}
"40" : {
"Departement" : "EXEMPLE",
"Nom" : "EX1",
"Prenom" : "EX2"
},
问题是在调试期间,我可以看到快照具有该值,但当我试图通过变量salarié显示它时,我什么也得不到 您还可以将setter/getter放入序列化类中,因为您的Firebase是JSON格式的 对于您的
Salarie类
将其更改为此,确保在您的应用程序中启用了GSON库
,我的是:
compile 'com.google.code.gson:gson:2.7'
工薪阶层:
@IgnoreExtraProperties
public class Salarie {
@SerializedName("Departement")
public String Departement;
@SerializedName("Nom")
public String Nom;
@SerializedName("PreNom")
public String PreNom;
}
mDB = FirebaseDatabase.getInstance().getReference("Salarie");
mDB.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Toast.makeText(getApplication(),snapshot.getKey(),Toast.LENGTH_SHORT).show();
Salarie salarie = snapshot.getValue(Salarie.class);
Toast.makeText(getApplication(),salarie.Departement,Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
代码:
@IgnoreExtraProperties
public class Salarie {
@SerializedName("Departement")
public String Departement;
@SerializedName("Nom")
public String Nom;
@SerializedName("PreNom")
public String PreNom;
}
mDB = FirebaseDatabase.getInstance().getReference("Salarie");
mDB.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Toast.makeText(getApplication(),snapshot.getKey(),Toast.LENGTH_SHORT).show();
Salarie salarie = snapshot.getValue(Salarie.class);
Toast.makeText(getApplication(),salarie.Departement,Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
当您要查找数据时,请确保在Firebase上使用query
功能进行查询
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Toast.makeText(getApplication(),snapshot.getKey(),Toast.LENGTH_SHORT).show();
String department = (String)snapshot.child("Departement").getValue();
}
}
我已经向您展示了获取部门名称的过程,您可以尝试获取所有值。问题是模型类中变量的命名。
您需要更改变量的名称,如下所示:-
public class Salarié {
private String Departement; //must be same as firebase response
private String Nom;
private String Prenom;
public String getDepartement() {
return Departement;
}
public void setDepartement(String departement) {
Departement = departement;
}
public String getNom() {
return Nom;
}
public void setNom(String nom) {
Nom = nom;
}
public String getPrenom() {
return Prenom;
}
public void setPrenom(String prenom) {
Prenom = prenom;
}
}
是否有错误?请尝试将您的Salarie类变量的第一个字母表更改为大写。i、 将“department”改为“department”,或尝试使用PropertyName注释,如
@PropertyName(PROP_NAME)私有字符串mName代码>@MohammedJunaid当我尝试你的解决方案时,应用程序崩溃了。@NabilaK崩溃日志是什么?这起作用了,但我不仅仅是想得到部门的值,我需要整个salarié的值。你可以创建一个模型类型列表并向该模型添加值。或者让它实例化创建一个实例类,这样你就可以拥有所有你的数据,这样你就可以访问你的数据,这就是我最后要做的。谢谢你的帮助