Получение вложенных данных из firebase и их соответствующая сортировка - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть куча вложенных данных, хранящихся в FirebaseRealTimeDatabase, например:

Database structure

Я могу получить набор данных, то есть профиль иих соответствующие оценки.

ArrayList<String> profileNameList = new ArrayList();
ArrayList<String> profileStatusList = new ArrayList();
ArrayList<int> scoreList = new ArrayList();

databaseReference.child("players")
            .addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    Iterable<DataSnapshot> children = dataSnapshot.getChildren();

                    for (DataSnapshot child : children) {
                        Profile profile = child.child("profile").getValue(Profile.class);
                        Scores scores= child.child("scores").getValue(Scores.class);

                        profileNameList.add(profile.getName());
                        profileStatusList.add(profile.getStatus());
                        scoreList.add(scores.getScore());
     }
  }

Затем я использую Collections.sort(scoreList), чтобы отсортировать оценки по убыванию.Моя задача, однако, заключается в том, как мне снова связать отсортированные оценки (от самого низкого до самого высокого) с профилем игрока, например,

  Gavin - 15
  Rico - 40

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 14 декабря 2018

Чтобы решить эту проблему, используйте следующие строки кода:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference playersRef = rootRef.child("players");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name = ds.child("profile").child("name").getValue(String.class);
            long score = ds.child("score").child("baseball").getValue(Long.class);
            Log.d(TAG, name + " - " + score);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
playersRef.addListenerForSingleValueEvent(valueEventListener);

Результат в вашем logcat будет:

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