首页 > 解决方案 > 将 ServerValue.TIMESTAMP 保存为实时数据库中的字符串

问题描述

我正在尝试将 firebase 时间戳保存为字符串,我正在使用实时数据库,我想根据它们的发布日期安排我的节点,并且我想排除那些早于 24 小时的帖子。我的节点结构是这样的

 "posts" : {
      "b" : {
        "text" : "5",
        "timestamp" : "{.sv=timestamp}",
         "uid" : "KpZvp0bhOlPJI3KKwe1AF7Apb2U2"
      },
      "a" : {
        "text" : "hey",
        "timestamp" : "1559912589250",
        "uid" : "KpZvp0bhOlPJI3KKwe1AF7Apb2U2"
      }
 }

我根据日期安排帖子没有问题,但是当我想排除超过 24 小时的帖子时,我开始遇到问题

  firebaseDatabase.reference.child("posts").orderByChild("timestamp").startAt((System.currentTimeMillis() - 86400000))

“startAt()”不需要 long 或 integer,它只需要 boolean、strings 和 double 作为参数。

这就是我创建节点的方式

    firebaseDatabase.reference.child("posts").push().setValue(mapOf(
            "by" to uid,
            "text" to "hey",
            "timestamp" to  ServerValue.TIMESTAMP)
    )

我尝试将 ServerValue.TIMESTAMP 更改为字符串,但将其保存为 "{".sv" : "timestamp"}" 我环顾四周,发现如果我发送带有名为 ".sv" 的索引的地图并且具有“时间戳”的值,以便数据库将识别它并用服务器时间戳替换该值,如下所示

                firebaseDatabase.reference.child("posts").push().setValue(mapOf(
            "by" to uid,
            "text" to "hello",
            "timestamp" to mapOf(".sv" to "timestamp")

时间戳值将是作为长数字的服务器时间戳,所以基本上 ServerValue.TIMESTAMP 就像一张地图,这就是为什么当我尝试将其更改为字符串时它给了我 "{".sv" : "timestamp"}" 值.

那么如何将服务器时间戳保存为字符串呢?或者如何将数据查询为长数字而不将其更改为字符串

标签: javaandroidfirebasefirebase-realtime-databasekotlin

解决方案


推荐阅读