Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android的聊天应用程序中,按日期对Firebase列表项进行排序_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

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

Java 在Android的聊天应用程序中,按日期对Firebase列表项进行排序,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在开发一个Android应用程序,使用RecyclerView显示Firebase实时数据库中的列表。每个列表项包括心率测量值,例如72、日期戳字符串和测量时间戳字符串。不过,我希望分组并显示当天采集的所有心率,就像消息传递应用程序显示当天发送和接收的消息一样,如下所示 例如,我想在“今天”文本视图下显示今天采集的所有心率,并在其各自的带有日期的文本视图下显示其他几天的心率 以下是心率记录的示例: "patient's_heart_rate" : { "HdFZE8Y37DfhTb7RaX

我正在开发一个Android应用程序,使用
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()
方法,您将获得该间隔之间的所有对象。我建议你尝试一下,如果出现其他问题,再问另一个问题。