как получить много значений под идентификатором - PullRequest
0 голосов
/ 18 января 2019

Я получаю много значений по идентификатору, но это не работает.Это должно быть очень легко, но я застрял.

Это моя структура данных:

Attendance
    x73aXTQHXHXHQ 
        current
          value: "Bill Gates"
        company
          value: "Apple"
        history
            -La7wew7hdxccdcdzssf
                   value: 156000000001
            -La7wptthd3ceeqoz34f
                   value: 156000000002
            -La7wew7hdxccdcdzssf
                   value: 156000000003

Я пробовал этот код и успешно только количество извлеченных детей Output: 3, но не значения детей 156000000001, как я хочу.Это мой код, любая помощь, спасибо.

if (uid != null) {
   ref.child(uidKeys).child(uid).child("history").addValueEventListener(new ValueEventListener() {
     @Override
     public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

          int countUnderHistory = (int) dataSnapshot.getChildrenCount();
          long[] dataHistory = new long[countUnderHistory];
          int index = 0;
          for (DataSnapshot push : dataSnapshot.getChildren()) {
               NonDuplicateAttendance nDa = push.getValue(NonDuplicateAttendance.class);

                     if (nDa != null) {
                         dataHistory[index] = nDa.getuHistory();
                     }
                     index++;
          }
      }

           @Override
           public void onCancelled(@NonNull DatabaseError databaseError) {
           }
   });
}

NonDuplicateAttendance класс:

package com.example.aspireone.myapplication;

public class NonDuplicateAttendance {

    private long value;

    public NonDuplicateAttendance(long value) {
        this.value = value;
    }

    public long getuHistory() {
        return value;
    }
}

1 Ответ

0 голосов
/ 18 января 2019

Так как вы не поделились своим NonDuplicateAttendance, я не могу сказать, что там происходит.Но чтобы напечатать значения в истории:

ref.child(uidKeys).child(uid).child("history").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot snapshot: dataSnapshot.getChildren()) {
            System.out.println(snapshot.child("value").getValue(Long.class));
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException(); // don't ignore errors
    }
});

Редактировать

Ваш класс не работает, потому что он не объявляет открытый value собственность.Чтобы исправить это:

public class NonDuplicateAttendance {

    public  long value;

    public NonDuplicateAttendance() { }

    public NonDuplicateAttendance(long value) {
        this.value = value;
    }

    @Exclude
    public long getuHistory() {
        return value;
    }
}

Изменения:

  • Поле value является общедоступным, поэтому SDK распознает его как соответствующее свойству value в вашем JSON.
  • Я добавил конструктор без аргументов, потому что в противном случае SDK не сможет создать экземпляр вашего класса.
  • Я аннотировал ваш метод getuHistory() для исключения из базы данных, поскольку в противном случаеSDK также напишет свойство uHistory.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...