我正在构建一个管理Android Studio中日期的小型应用。 为此,我在Firebase中创建了以下数据库:
所有日期均为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。此外,我还想知道是否有一种更好的方法可以在不使用循环的情况下检索特定节点的第一个和最后一个孩子,还是回调是我唯一的选择?