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());
}
}
答案 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
重新排序列表