【问题标题】:How do I retrieve Firebase data in bulk for subsequent manipulation?如何批量检索 Firebase 数据以进行后续操作?
【发布时间】:2017-06-29 17:16:16
【问题描述】:

我正在从 SQLite 过渡到 Firebase,在此过程中,我有很多预先存在的数据需要设置到不同的视图中。

初始视图:按字母顺序排列的列表(无重复项),仅显示其下方存在的资源的字母(意味着如果没有以 X 开头的资源,则 X 根本不应该显示)。

次要视图:点击一个字母后,它会展开手风琴样式以显示以该字母开头的资源(无重复)。

我的 Firebase 查询是正确的,因为我得到了正确的数据,但我该如何使用它?理想情况下,我想做的是获取所有主题,将它们放入 TreeSet 以消除重复项并自动对它们进行排序,然后做同样的事情,但只获取第一个字母。我无法修改内部类中的集合、数组或列表,但是如果我从内部实例化也无法访问相同的内容(这没关系,因为它对每个对象都被调用为新鲜的,所以它是总是一套新的)。

有没有我遗漏的最佳实践?

mDatabase = FirebaseDatabase.getInstance();
mRootRef = mDatabase.getReference();
mQuoteRef = mRootRef.child("quotes");
Query topicQuery = mQuoteRef.orderByChild("Topic");

topicQuery.addChildEventListener(new ChildEventListener() {

      @Override
      public void onChildAdded(DataSnapshot dataSnapshot, String s) {
           TreeSet<String> topicList = new TreeSet<>(); <--obv not right
           TreeSet<String> firstLetterList = new TreeSet<>();
           GetQuoteInfo quote = dataSnapshot.getValue(GetQuoteInfo.class);
           if (quote.getTopic() != null) {
                topicList.add(quote.getTopic());
                firstLetterList.add(quote.getTopic().substring(0, 1));
           }
    }
}
magicalListThatContainsAllOfMyFirebaseDataThatICanNowManipulate;

【问题讨论】:

    标签: firebase firebase-realtime-database treeset


    【解决方案1】:

    当您从 Firebase 数据库中检索数据时,您将其检索为 Map,而不是作为 Set。因此,为了解决您的问题,请更改检索数据的方式。因为 Firebase 是一个NoSQL database,更好的说法是一个JSON database,所以所有的结构都是key and value。因此,将Set 更改为Map,您的问题将得到解决。

    希望对你有帮助。

    【讨论】:

    • 好吧,我仍然必须在 onChildAdded 之外定义 Map,这会阻止我添加它。
    • onChildAdded()方法外面不需要定义,可以在里面定义Map,否则为null,因为Firebase异步加载和同步数据。
    • 但是,一旦将所有数据添加到Map,我如何访问onChildAdded 之外的Map?这是假设我可以找到一种方法来添加到 Map 而无需每次都重新定义。
    • 简单地说,在该方法中对地图做你需要做的事情。如果您想在该方法之外使用该 Map,请将地图对象传递给另一个方法并在外部使用它,或者从这个 post 中查看我的答案。
    • 我建议你使用addListenerForSingleValueEvent() 并在onDataChange() 方法中做同样的事情。
    猜你喜欢
    • 2014-08-10
    • 2012-01-20
    • 2023-01-24
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多