Firebase数据排序

时间:2015-06-08 02:40:36

标签: android firebase

当我在我的Android应用程序中使用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();
    }
});

我相信

snapshot.getValue()

应该为我提供我所有的独特ID,但我如何命令它们按照从最新到最旧的顺序显示它们?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

如果你打电话:

ref.push().setValue(anObject);

然后,onChildAdded会使anObjectsnapshot.getValue()的数据触发Firebase postRef = ref.child("posts"); Map<String, String> post1 = new HashMap<String, String>(); post1.put("author", "gracehop"); post1.put("title", "Announcing COBOL, a New Programming Language"); postRef.push().setValue(post1); Map<String, String> post2 = new HashMap<String, String>(); post2.put("author", "alanisawesome"); post2.put("title", "The Turing Machine"); postRef.push().setValue(post2);

所以在这个例子中来自Firebase guide for Android

onChildAdded

让我们注册我们的ref.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot snapshot, String previousChildKey) { System.out.println(snapshot.getKey()); } }; 听众:

onChildAdded

});

只要将子项添加到我们注册的位置,就会调用onChildAdded方法。我们添加了两个孩子,因此gracehop会调用两次。第一次为alanisawesome第二次触发onChildAdded。每次打印相应节点的密钥。

注意:Firebase也会为该位置的所有现有子项触发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()); } }); 事件。所以它会立即为所有现有的孩子,以及每当孩子加入时开火。

您似乎希望一次获得所有价值。如果这是您正在寻找的,您可以使用所谓的ValueListener来完成它

onDataChange

请注意,此方法在此处称为postRef。因此,只要该位置的数据发生变化,就会调用此方法。由于您将子项添加到onDataChange所在的位置,因此gracehop方法将被调用两次。第一次只有gracehop,第二次同时使用alanisawesomeDataSnapshot

您可以使用以下内容循环@Override public void onDataChange(DataSnapshot snapshot) { for (DataSnapshot postSnapshot: snapshot.getChildren()) { System.out.println(postSnapshot.getKey()); } } 中的节点

onDataChange

如果我们像以前一样推送这两个值,gracehop将会触发两次。第一次打印gracehop密钥时,它会第二次打印alanisawesome的密钥,然后打印onChildAdded的密钥。因此,它将总共打印三个值,其中newRandomX()的代码段只打印两个。