【问题标题】:How to order firebase data from the latest如何从最新订购 Firebase 数据
【发布时间】:2018-06-04 04:45:34
【问题描述】:

默认情况下,Firebase 会从最早的数据开始排序,我需要从最新的数据开始排序。

我正在使用时间戳来执行此操作,但似乎不起作用。

 private void filldata() {
        mDatabase.child("Data").orderByChild("timestamp").addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot  snapshot, String s) {
                System.out.println("snapshot:" + snapshot.toString());
            }
}

【问题讨论】:

    标签: android firebase firebase-realtime-database recyclerview-layout


    【解决方案1】:

    在您的情况下,您无需在此处使用orderByChild(),因为firebase 本身会生成基于时间戳的唯一密钥,因此您只需在查询中使用orderByKey(),您将获得最新顺序的数据。

    唯一键基于时间戳,因此列表项将 自动按时间顺序排列。因为 Firebase 会生成一个 每个博客文章的唯一键,如果 多个用户同时添加一个帖子。 你可以找到更多here

    【讨论】:

      【解决方案2】:

      我会建议使用

      mDatabase.child("Data").orderByKey().limitToLast(no_of_items_you_want)
      

      这将为您提供最新数据列表

      还可以从快照使用中获得价值

      snapshot.getValue(String.class);
      

      【讨论】:

      • 如果您在上传时使用了 push() 方法,它会起作用...也显示该代码
      【解决方案3】:

      由于orderByChild() 仅按升序对数据进行排序,因此您应该在子节点中存储一个额外的数据项,其值为timestamp*(-1),然后对该数据项进行排序(排序)。

      【讨论】:

      • 您可以从对我有用的 recyclerView 中撤消。
      【解决方案4】:

      您的代码是正确的。通常建议的订购方式是使用负时间戳。

      但是我之前注意到,firebase 确实按时间戳对您的结果进行排序,正如您目前希望的那样。当设备收到结果时,它会按到达(怀疑)对结果重新排序。

      要对此进行测试,请尝试使用.limitToLast(n) 函数来限制您的结果,您会意识到虽然 firebase 会向您返回最后 10 个(按时间戳顺序)结果,但这些结果不会按时间戳排序。

      因此,最好的解决方案是将 Firebase 结果存储在一个列表中,并使用像comparator 这样的排序工具重新排序列表

      【讨论】:

        猜你喜欢
        • 2018-05-21
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 2017-01-29
        • 2019-02-13
        • 2020-01-28
        • 1970-01-01
        相关资源
        最近更新 更多