gpt4 book ai didi

android - Firebase 数据排序

转载 作者:行者123 更新时间:2023-11-29 20:43:24 25 4
gpt4 key购买 nike

当我在我的 Android 应用程序中使用 firebase 时,我感觉好像缺少了一些重要的东西。我一直在用

push();

将我的数据放入具有唯一 ID 的 firebase 中。我一直在使用 ChildEventListener 的 Activity 中访问此数据:

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,但我如何命令它们按从新到旧的顺序显示?

感谢您的帮助!

最佳答案

如果你调用:

ref.push().setValue(anObject);

然后这将触发 onChildAdded 一次,数据来自 snapshot.getValue() 中的 anObject

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

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);

让我们注册我们的 onChildAdded 监听器:

ref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot snapshot, String previousChildKey) {
System.out.println(snapshot.getKey());
}
};

});

只要将 child 添加到我们注册的位置,就会调用 onChildAdded 方法。我们添加了两个 child ,所以 onChildAdded 将被调用两次。第一次为 gracehop 触发,第二次为 alanisawesome 触发。每次都会打印对应节点的key。

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

您似乎希望一次获得所有值。如果那是您正在寻找的,您可以使用所谓的 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。因此,只要该位置的数据发生变化,就会调用此方法。由于您在 postRef 下添加了子项,因此 onDataChange 方法将被调用两次。第一次只使用 gracehop,第二次使用 gracehopalanisawesome

您可以循环遍历 DataSnapshot 中的节点:

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

如果我们像以前一样推送两个值,onDataChange 将触发两次。第一次它将打印 gracehop 的 key ,第二次它将打印 gracehop 的 key ,然后是 alanisawesome 的 key 。所以它总共会打印三个值,而带有 onChildAdded 的代码 fragment 只会打印两个。

关于android - Firebase 数据排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30700579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com