如何从最新的订购firebase数据

时间:2018-06-03 10:09:09

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

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());
            }
}

4 个答案:

答案 0 :(得分:1)

您无需在此处使用orderByChild()因为firebase本身会生成基于时间戳的唯一键,因此您只需在查询中使用orderByKey()即可获得数据最新订单。

  

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我建议使用

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

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

还要从快照使用中获取价值

snapshot.getValue(String.class);

答案 3 :(得分:0)

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

然而之前我注意到firebase按时间戳排序您的结果,正如您目前希望的那样。当设备收到结果时,它会通过到达(怀疑)重新排序结果。

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

因此,最佳解决方案是将firebase结果存储在列表中,并使用排序工具(如comparator

重新排序列表