【问题标题】:How to store ServerValue.TIMESTAMP as a string in Firebase database如何将 ServerValue.TIMESTAMP 作为字符串存储在 Firebase 数据库中
【发布时间】:2018-04-03 07:48:20
【问题描述】:

我有一个 firebase recyclerview,我想查询 OrderByChild 中的数据,例如 TOPWEEK 或 TOPDAYS,以便我计划将 ServerValue.TIMESTAMP 与星数相结合,例如

“组合”:“1522741072_5”

第一个值是时间戳,第二个值是星数。但是,如果我每次新的最高时都这样做,则忽略星数(因为时间戳以毫秒为单位)。我认为我应该从时间戳中删除一些值。像这样:

String.valueOf(ServerValue.TIMESTAMP).substring(0,4)

但这是不可能的,因为我无法将时间戳作为字符串存储在 firebase 数据库中。这是我的模型课

@Exclude
    public Map<String, Object> haritala() {
        HashMap<String, Object> result = new HashMap<>();
        result.put("yazar", yazar);
        result.put("baslik", baslik);
        result.put("uid",uid);
        result.put("favsays", favsays);
        result.put("fav", favori);
        result.put("mesajsays", mesajsays);
        result.put("mesaj", mesaj);
        result.put("Combin", ServerValue.TIMESTAMP);   

        return result;
    }

有什么解决办法

【问题讨论】:

  • star counts 有固定值吗?
  • 不可以由用户增减
  • 所以为了更好地理解,每次用户增加计数器时,你都会用这个1522741072_6 覆盖这个值1522741072_5,对吧?
  • 是的,亚历克斯·马莫。

标签: android firebase firebase-realtime-database timestamp


【解决方案1】:

根据您上次的评论,我了解到star counts 不包含固定值,它可以由用户递增。在这种情况下,您的解决方案将不起作用。还有另一种解决方案是拥有两个独立的属性,但不幸的是,Firebase 实时数据库不支持对多个属性的查询,仅支持对单个子属性的查询。此外,您应该考虑扩充您的数据结构以允许反向查找,因为在这种情况下您将需要很多节点。

如果我是你,每次我要向数据库添加新项目时,我都会使用push() 方法,该方法将生成一个基于时间的随机密钥作为项目的密钥。因此,默认情况下,您的所有项目都将按创建时间排序。在这种情况下,您只需要使用如下所示的查询:

Query query = rootRef.child("results").orderByChild("reuslt");

不要忘记将result 属性的值设置为IntegerLong,而不是String,因为在字符串的情况下,项目按lexicographically 排序。

您可以考虑查看Cloud Firestore,其中允许链式查询。

【讨论】:

    猜你喜欢
    • 2018-01-12
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    相关资源
    最近更新 更多