如何在android中从firebase到列表视图检索多个数据?

如何在android中从firebase到列表视图检索多个数据?,android,firebase,listview,firebase-realtime-database,Android,Firebase,Listview,Firebase Realtime Database,我想在android studio中检索所有这些数据到ListView,这可能吗? 这容易做吗?我是代码开发新手 [![Firebase数据][1][1] 我正在使用addValueEventListener检索数据: reff2 = database.getInstance().getReference().child("Registo Inicial e Final"); reff2.addValueEventListener(new ValueEventListene

我想在android studio中检索所有这些数据到ListView,这可能吗? 这容易做吗?我是代码开发新手

[![Firebase数据][1][1]

我正在使用addValueEventListener检索数据:

reff2 = database.getInstance().getReference().child("Registo Inicial e Final");

reff2.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange( DataSnapshot dataSnapshot) {

        for (DataSnapshot ds : dataSnapshot.getChildren()) {

            Log.e("MATRICULAA", String.valueOf(ds.child("matricula").getValue()));


               String message = ds.child("nome_CONDUTOR").getValue().toString();
               String message2 = ds.child("matricula").getValue().toString();
               String message3 = ds.child("cod_PROJETO").getValue().toString();
               String message4 = ds.child("km_INICIAL").getValue().toString();
               String message5 = ds.child("km_FINAL").getValue().toString();
               String message6 = ds.child("data_INICIO").getValue().toString();
               String message7 = ds.child("data_FIM").getValue().toString();
               String message8 = ds.child("hora_INICIO").getValue().toString();
               String message9 = ds.child("hora_FIM").getValue().toString();
               String message10 = ds.child("observacoes").getValue().toString();

               Log.e("KM", String.valueOf(ds.child("km_FINAL").getValue()));

               Nome.setText(message);
               Matricula.setText(message2);
               Cod.setText(message3);
               Kilometros_inicial.setText(message4);
               Kilometros_final.setText(message5);
               Data_inicial.setText(message6);
               Data_final.setText(message7);
               Hora_inicial.setText(message8);
               Hora_final.setText(message9);
               Observacoes.setText(message10);
           }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        
        Log.e("The read failed: " ,databaseError.getMessage());
    }
});
这就是我得到的:
我需要来自不同节点的所有数据,我不知道为什么会覆盖数据。

是。你可以,很简单。创建如下所示的类:

public class YourClass(){
    public String cod_PROJETO;
    public String data_FIM; 
    .... /// All or required data items here


    // no argument constructor
    public YourClass(){}


    public String getCod_PROJETO(){
        return cod_PROJETO;
    }

    public void setCod_PROJETO(String cod_PROJETO){
        this.cod_PROJETO = cod_PROJETO;
    }
    .... /// Getters and setters for your data items.
    .... /// Android studio code completion suggestions will make this easier;
}
YourClass data = ds.getValue(YourClass.class);
记住:如果您使用的是getter和setter,那么它们必须是公共的,否则变量必须是公共的。使用getter和setter是首选方法

然后,在valueEvent侦听器中创建该类,如下所示:

public class YourClass(){
    public String cod_PROJETO;
    public String data_FIM; 
    .... /// All or required data items here


    // no argument constructor
    public YourClass(){}


    public String getCod_PROJETO(){
        return cod_PROJETO;
    }

    public void setCod_PROJETO(String cod_PROJETO){
        this.cod_PROJETO = cod_PROJETO;
    }
    .... /// Getters and setters for your data items.
    .... /// Android studio code completion suggestions will make this easier;
}
YourClass data = ds.getValue(YourClass.class);
由于要在ListView中显示它,请在valueEventListener中使用类似的内容:

yourClassList.clear();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
    YourClass data = ds.getValue(YourClass.class);
    if(data != null)
        yourClassList.add(data);
}
// update your listView adapter here using notifyDataSetChanged 
通过这种方式,您还可以在firebase中设置数据,如:

myRef.child("key").setValue(data);  //data = object of class YourClass

这段代码中到底有什么东西没有按您期望的方式工作?如果您能指出代码中的什么东西在工作,什么东西不在工作,您会收到什么错误消息,这将非常有帮助。检索到的数据正在覆盖,它只显示来自上一个随机firebase按键的所有数据