Android Firebase数据排序

Android Firebase数据排序,android,firebase,Android,Firebase,当我在安卓应用程序中使用firebase时,我觉得自己好像错过了什么大事。我一直在使用 push(); 使用唯一id将我的数据放入firebase。 我一直在使用ChildEventListener在活动中访问此数据: ref.addChildEventListener(new ChildEventListener() { // Retrieve new posts as they are added to the database @Override pub

当我在安卓应用程序中使用firebase时,我觉得自己好像错过了什么大事。我一直在使用

push();
使用唯一id将我的数据放入firebase。 我一直在使用ChildEventListener在活动中访问此数据:

ref.addChildEventListener(new ChildEventListener() {         
    // Retrieve new posts as they are added to the database
    @Override public void onChildAdded(DataSnapshot snapshot, String previousChildKey) {
        Map<String, Object> newPost = (Map<String, Object>) snapshot.getValue();
    }
});
应该向我提供我所有的唯一ID,但我如何命令它们按从最新到最旧的顺序显示它们

谢谢你的帮助

如果你打电话:

ref.push().setValue(anObject);
然后,它将使用
snapshot.getValue()
中的
anObject
中的数据触发一次
onchildaded

因此,在本例中

}))

每当将子对象添加到我们注册它的位置时,就会调用
onchildaded
方法。我们添加了两个子项,因此,
onchildaded
将被调用两次。第一次为
gracehop
发射,第二次为
alanisawesome
发射。每次它都会打印相应节点的密钥

注意:Firebase还为该位置的所有现有子级触发
onchildaded
事件。因此,它会立即为所有现有的子对象以及添加子对象时触发

你似乎期望你一次得到所有的价值。如果这就是你想要的,你可以通过一个所谓的ValueListener来完成它

postRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        System.out.println(snapshot.getValue());
    }
    @Override
    public void onCancelled(FirebaseError firebaseError) {
        System.out.println("The read failed: " + firebaseError.getMessage());
    }
});
请注意,该方法在此处称为
onDataChange
。因此,只要位置上的数据发生更改,就会调用此方法。由于在where
postRef
下添加了子项,因此将调用两次
onDataChange
方法。第一次使用的是
gracehop
,第二次使用的是
gracehop
alanisawesome

您可以使用以下命令在
DataSnapshot
中的节点上循环:

@Override
public void onDataChange(DataSnapshot snapshot) {
    for (DataSnapshot postSnapshot: snapshot.getChildren()) {
        System.out.println(postSnapshot.getKey());
    }
}

如果我们像前面一样按下这两个值,
onDataChange
将触发两次。第一次打印
gracehop
的密钥,第二次打印
gracehop
的密钥,然后打印
alanisawesome
的密钥。因此,它将总共打印三个值,其中带有
onchildaded
的代码段将只打印两个值。

非常感谢您的回答!我得晚一点测试一下。如果行得通,我就接受!很好用!谢谢你的时间!
ref.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot snapshot, String previousChildKey) {
        System.out.println(snapshot.getKey());
    }
};
postRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        System.out.println(snapshot.getValue());
    }
    @Override
    public void onCancelled(FirebaseError firebaseError) {
        System.out.println("The read failed: " + firebaseError.getMessage());
    }
});
@Override
public void onDataChange(DataSnapshot snapshot) {
    for (DataSnapshot postSnapshot: snapshot.getChildren()) {
        System.out.println(postSnapshot.getKey());
    }
}