Java 在Android的聊天应用程序中,按日期对Firebase列表项进行排序
我正在开发一个Android应用程序,使用Java 在Android的聊天应用程序中,按日期对Firebase列表项进行排序,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在开发一个Android应用程序,使用RecyclerView显示Firebase实时数据库中的列表。每个列表项包括心率测量值,例如72、日期戳字符串和测量时间戳字符串。不过,我希望分组并显示当天采集的所有心率,就像消息传递应用程序显示当天发送和接收的消息一样,如下所示 例如,我想在“今天”文本视图下显示今天采集的所有心率,并在其各自的带有日期的文本视图下显示其他几天的心率 以下是心率记录的示例: "patient's_heart_rate" : { "HdFZE8Y37DfhTb7RaX
RecyclerView
显示Firebase实时数据库中的列表。每个列表项包括心率测量值,例如72、日期戳字符串和测量时间戳字符串。不过,我希望分组并显示当天采集的所有心率,就像消息传递应用程序显示当天发送和接收的消息一样,如下所示
例如,我想在“今天”文本视图下显示今天采集的所有心率,并在其各自的带有日期的文本视图下显示其他几天的心率
以下是心率记录的示例:
"patient's_heart_rate" : {
"HdFZE8Y37DfhTb7RaXBIuvusTzn2" : {
"-LJ0a-p7KTgyagR22HZQ" : {
"heartRate" : "128\r",
"heartRateDate" : "04-08-2018",
"heartRateId" : "-LJ0a-p6SblappQIsyr0",
"heartRateTimeStamp" : "00:01:06"
},
"-LJ0a0271S6LWEDaDiAL" : {
"heartRate" : "\u00007\u0000\u00006\r",
"heartRateDate" : "04-08-2018",
"heartRateId" : "-LJ0a0271S6LWEDaDiAK",
"heartRateTimeStamp" : "00:01:06"
}
}
在您的firebase中,您的模型将添加到节点。从中,您可以通过按照时间戳进行排序来检索它们
database.orderByChild("timestamp").
.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
// adapter.notifyDataSetChanged();
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
如果将时间戳存储为字符串,则无法获得一致的结果是使用
ServerValue.TIMESTAMP
将数据保存为时间戳的方法
要根据时间戳属性对项目进行排序,应使用如下查询:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
Query query = rootRef.child("patient's_heart_rate").child(uid).orderByChild("heartRateTimeStamp");
这也适用于存储日期吗?是的。每次你需要使用时间戳时,你都应该相应地存储它。一切都好吗?我能帮你提供其他信息吗?好的。我想按日期对数据进行排序,并考虑按日期对数据进行结构化,即在特定日期下推送心率值,但这有一个缺点,即您只能查询特定日期的数据,因此我暂时不去管它。我可以使用startAt()和endAt()获取所有日期相同的值吗?可以。您可以将开始日期传递给startTo()
方法,将结束日期传递给endAt()
方法,您将获得该间隔之间的所有对象。我建议你尝试一下,如果出现其他问题,再问另一个问题。