Firebase:我可以检索密钥而不是值

时间:2017-07-24 08:52:42

标签: android firebase firebase-realtime-database

我正在尝试使用以下代码检索快照的值:

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"
},

问题是在调试期间我可以看到快照有值,但是当我尝试通过变量salarié显示它时,我什么也得不到。

3 个答案:

答案 0 :(得分:1)

问题是模型类中变量的命名 您需要更改变量名称,如下所示: -

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;
    }
}

答案 1 :(得分:0)

您还可以将您的setter / getter置于Serialized Class中,因为您的Firebase采用JSON格式

对于您的Salarie class将其更改为此,请确保您的应用程序中已启用GSON library

 compile 'com.google.code.gson:gson:2.7'

Salarie班级:

@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功能。

答案 2 :(得分:0)

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();


    }
}

我已经向您展示了获取部门名称,就像您可以尝试获取所有值一样。