Как получить несколько данных из Firebase для просмотра списка в android? - PullRequest
0 голосов
/ 04 мая 2020

Я хочу получить все эти данные в ListView в android студии, это возможно? Это легко сделать? Я новичок в разработке кода.

Firebase Data

Я использую "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());
    }
});

Вот что я получаю: мне нужны все данные с разных узлов, я не знаю, почему они перезаписывают данные ..

enter image description here

1 Ответ

1 голос
/ 04 мая 2020

Да. Вы можете. Это довольно легко. Создайте класс следующим образом:

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

Помните: если вы используете getter и setter, они должны быть publi c, иначе переменная должна быть publi c. Использование getter и setter является предпочтительным методом.

Тогда ваш класс this в слушателе valueEvent будет таким:

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 

Таким образом, вы также можете установить данные в базе данных, например:

myRef.child("key").setValue(data);  //data = object of class YourClass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...