Android Firebase数据排序
当我在安卓应用程序中使用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
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
。因此,只要位置上的数据发生更改,就会调用此方法。由于在wherepostRef
下添加了子项,因此将调用两次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());
}
}