从父节点获取Firebase中的第一个和最后一个子键

时间:2019-05-02 21:43:59

标签: java android firebase firebase-realtime-database

我正在构建一个管理Android Studio中日期的小型应用。 为此,我在Firebase中创建了以下数据库:

enter image description here

所有日期均为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",而不是{{1}}。

非常感谢您的帮助。

P.S。此外,我还想知道是否有一种更好的方法可以在不使用循环的情况下检索特定节点的第一个和最后一个孩子,还是回调是我唯一的选择?

0 个答案:

没有答案