Как получить объединенные данные 2 узлов, используя один для каждого цикла с тем же объектом dtasnapshot - PullRequest
0 голосов
/ 25 июня 2018

screenshot

Мне нужно отобразить список всех пользователей (имя, дата и статус) в одном списке, где status = «Leave Pending», как указано красной стрелкой. Я написал следующий код, чтобы сделать это, но он не дает мне имя пользователя в списке.

screenshot

Как я использовал для каждого цикла вложенные для этого, но не получая имя пользователя. Пожалуйста, предложите мне какое-нибудь решение для отображения имени пользователя.

В моем коде:

  1. LeaveRequestsInfo - класс модели для отображения данных.
  2. reportsInfo - это объект модального класса, в который я отображаю свои данные.
  3. listViewRequests - это ListView
  4. reportsList является объектом List

1 Ответ

0 голосов
/ 25 июня 2018

Чтобы решить эту проблему, вам нужно дважды выполнить запрос к базе данных, один раз, чтобы получить идентификатор пользователя, и второй, основываясь на этом идентификаторе, чтобы получить имя пользователя. Это можно сделать очень простым способом, используя класс String, поэтому, пожалуйста, используйте следующие строки кода:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference attendanceRef = rootRef.child("Attendance");
Query query = attendanceRef.orderByChild("status").equalsTo("Leave Pending");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String id = ds.child("id").getValue(String.class);

            DatabaseReference idRef = rootRef.child("Users").child(id);
            ValueEventListener eventListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    String name = dataSnapshot.child("name").getValue(String.class);
                    Log.d("TAG", name);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {}
            };
            idRef.addListenerForSingleValueEvent(eventListener);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
query.addListenerForSingleValueEvent(valueEventListener);

Результатом в вашем logcat будут все имена всех посещений, для которых статус Leave Pending.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...