当我在我的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,但我如何命令它们按照从最新到最旧的顺序显示它们?
感谢您的帮助!
答案 0 :(得分:2)
如果你打电话:
ref.push().setValue(anObject);
然后,onChildAdded
会使anObject
中snapshot.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
,第二次同时使用alanisawesome
和DataSnapshot
。
您可以使用以下内容循环@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot postSnapshot: snapshot.getChildren()) {
System.out.println(postSnapshot.getKey());
}
}
中的节点
onDataChange
如果我们像以前一样推送这两个值,gracehop
将会触发两次。第一次打印gracehop
密钥时,它会第二次打印alanisawesome
的密钥,然后打印onChildAdded
的密钥。因此,它将总共打印三个值,其中newRandomX()
的代码段只打印两个。