按日期对Firebase列表项进行排序和排序,例如Android中的聊天应用程序

时间:2018-08-13 11:52:02

标签: java android firebase firebase-realtime-database

我正在使用RecyclerView在正在开发的Android应用程序上显示Firebase实时数据库中的列表。每个列表项都包含一个心率测量值,例如72,是进行测量的日期戳字符串和时间戳字符串。但是我想对同一天采集的所有心率进行分组和显示,就像消息应用程序显示在同一天发送和接收的消息的方式一样,如下所示

messaging app image

例如,我想在今天文本视图下显示今天所采集的所有心率,并在其各自的文本视图下显示其他日期的其他日期

以下是心率记录的示例:

"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"
  }
}

2 个答案:

答案 0 :(得分:1)

如果将时间戳记存储为字符串,则无法获得一致的结果。 This 是使用TIMESTAMP将数据另存为ServerValue.TIMESTAMP的方式。

要根据timestamp属性对项目进行排序,您应该使用如下查询:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
Query query = rootRef.child("patient's_heart_rate").child(uid).orderByChild("heartRateTimeStamp");

答案 1 :(得分:0)

在您的 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) {

        }
    });