Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase:我可以检索键,但不能检索值_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

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é的值。你可以创建一个模型类型列表并向该模型添加值。或者让它实例化创建一个实例类,这样你就可以拥有所有你的数据,这样你就可以访问你的数据,这就是我最后要做的。谢谢你的帮助