【问题标题】:Retriving Data From Firebase In DataSnapshot ( Not In Sequence )在 DataSnapshot 中从 Firebase 检索数据(不按顺序)
【发布时间】:2017-07-03 17:53:53
【问题描述】:

我将数据保存到 Fire base 中,但是当我检索它时。数据不在序列中。

这里的数据以准确的顺序保存:

但是当我检索数据时丢失了它的顺序:

这是我检索数据的代码

 DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Users").child(Autho_User.getUid()).child("Data");
            ref.addListenerForSingleValueEvent(
                    new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {



                           System.out.println(" Value = "+dataSnapshot.toString()); 
}

(打印它只是为了检查值)即使我通过它,数据也不在序列中

 dataSnapshot.getvalue();

希望你有我的问题。我需要顺序的数据

【问题讨论】:

  • 你试过firebase orderByKey()排序运算符吗?
  • @icaeatclouds 这里我的密钥是“数据”所以它不起作用即使我尝试了 orderByValue();不适合我

标签: android firebase firebase-realtime-database


【解决方案1】:

Firebase 存储 JSON 数据。根据定义,JSON 中节点下的子节点是无序的。只有当数据被显示或检索时,它才能获得订单。因此,您显示的第一个屏幕截图只是 Firebase 数据库控制台显示它的顺序。

如果您想在应用程序中按特定顺序获取数据,您需要做两件事:

  1. 执行按该顺序返回数据的查询。
  2. 确保您的代码保持该顺序。

您共享的代码既不是 1 也不是 2,因此打印数据的顺序是任何人的猜测。通常它会按键的字典顺序排列,但它是未定义的。

要了解如何排序/过滤数据,请阅读Firebase documentation on ordering and filtering。要了解如何在使用 ValueEventListener 时维护项目的顺序,请阅读 Firebase documentation on listening for value events。当你将这两者结合起来时,你会得到:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Users").child(Autho_User.getUid()).child("Data");
Query dataOrderedByKey = ref.orderByKey();
dataOrderedByKey.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
            System.out.println("Key = "+childSnapshot.getKey()+" Value = "+childSnapshot.toString()); 
        }
    }
    ...

这是一个非常常见的错误/问题,所以这里有一些以前的问题供参考:

【讨论】:

  • 谢谢大佬知道了
猜你喜欢
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 2021-03-01
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
相关资源
最近更新 更多