java - 从父节点获取 Firebase 中的第一个和最后一个子键
问题描述
我正在构建一个在 Android Studio 中管理日期的小应用程序。为此,我在 Firebase 中创建了以下数据库:
所有日期均采用格式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 此外,我还想知道是否有更好的方法来检索特定节点的第一个和最后一个子节点而不使用循环,或者回调是我唯一的选择?
解决方案
推荐阅读
- flutter - 在显示演练之前显示主屏幕
- c++ - 代码在允许 getline 获取输入之前立即退出
- flutter - Flutter:pushReplacement 会删除堆栈吗?
- c# - 如何从 C# StackExchange.Redis 获取多个 Redis 键的 TTL
- darknet - openvino 无法从冻结的 tensorflow pb、xml 或 bin 模型编译 blob
- ruby-on-rails - 警告:已初始化常量 ERB::Revision
- javascript - 在 JS 中查找变量的类型
- c# - Visual Studio 2019 单元测试因 InvalidProgramException 而失败
- android - 自 Flutter 2 更新以来访问本地休息服务器的问题
- python - 将 Spark DataFrame 列中的 JSON 数据转换为表格格式