Получить первый и последний дочерние ключи в Firebase из родительского узла - PullRequest
0 голосов
/ 03 мая 2019

Я создаю небольшое приложение, которое управляет датами в Android Studio.Для этого я создал следующую базу данных в Firebase:

enter image description here

Все даты в формате YYYYMMDD.Я хочу получить первый и последний дочерние ключи узла config (то есть 20190101 и, скажем, 20211231).

Я использовал две функции обратного вызова из абстрактного класса Callback для каждого издаты.

Мой код:

public class Validator{
     public static void getMinMaxDatesFromDB(final Callback callback)
        {
            FirebaseDatabase db = FirebaseDatabase.getInstance();
            DatabaseReference ref = db.getReference("config");
            // Get First Date from Firebase
            ref.limitToFirst(1).addListenerForSingleValueEvent(new ValueEventListener()
            {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot)
                {
                    for(DataSnapshot snapshot : dataSnapshot.getChildren())
                    {
                        callback.minDate(snapshot.getKey());
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError)
                {
                    throw databaseError.toException();
                }
            });
            // Get Last Date from Firebase
            ref.limitToLast(1).addListenerForSingleValueEvent(new ValueEventListener()
            {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot)
                {
                    for(DataSnapshot snapshot : dataSnapshot.getChildren())
                    {
                        callback.maxDate(snapshot.getKey());
                    }
                }

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

И абонент:

// Date format - YYYYMMDD (String)
Validator.getMinMaxDatesFromDB(new Callback() {
    @Override
    void minDate(String minDate) {
        super.minDate(minDate);
        int year = Integer.parseInt(minDate.substring(0,3));
        int month = Integer.parseInt(minDate.substring(4,5));
        int day = Integer.parseInt(minDate.substring(6,7));
        //some more logic
    }

    @Override
    void maxDate(String maxDate) {
        super.maxDate(maxDate);
        int year = Integer.parseInt(maxDate.substring(0,3));
        int month = Integer.parseInt(maxDate.substring(4,5));
        int day = Integer.parseInt(maxDate.substring(6,7));
        // some more logic 
    }
});

Но я получаю "config" в minDate вместо "20190101".

Буду признателен за помощь.

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

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