Android - FirebaseRecyclerOptions 在数据库中递归

Posted

技术标签:

【中文标题】Android - FirebaseRecyclerOptions 在数据库中递归【英文标题】:Android - FirebaseRecyclerOptions recursive in the the db 【发布时间】:2021-07-05 12:28:54 【问题描述】:

我有点卡住了,创建 FirebaseRecyclerOptions 应该在数据库中以递归方式呈现结果 我的意思是如果我有数据库(Crossfit -> APR_09_2021 -> 10_12 -> “一些数据收集”) 所以我注意到如果我没有将特定路径传递给“某些数据收集”,那么它就无法检索数据 我的意思是:DatabaseReference mbase = FirebaseDatabase.getInstance().getReference().child("Crossfit").child(APR_09_2021) 所以我的问题是如何从数据库中获取所有结果。 对于我在 CrossFit 下的所有日期 谢谢。

    DatabaseReference mbase =  FirebaseDatabase.getInstance().getReference().child("Crossfit");
    recyclerView = findViewById(R.id.recycler_plan);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    FirebaseRecyclerOptions<TrainingTrainerCollector> options = new FirebaseRecyclerOptions.Builder<TrainingTrainerCollector>()
            .setQuery(mbase, TrainingTrainerCollector.class).build();
    recycleViewAdapter = new TrainerRecyclerviewViewAdapter(options,"Crossfit");
    recyclerView.setAdapter(recycleViewAdapter);
    recycleViewAdapter.startListening();
    super.onStart();

https://i.stack.imgur.com/x4Fik.png https://i.stack.imgur.com/1CW2U.png

【问题讨论】:

【参考方案1】:

你不能用你的实际数据库结构来做到这一点。当您使用以下参考时:

DatabaseReference mbase =  FirebaseDatabase.getInstance().getReference().child("Crossfit");

这意味着您正在尝试阅读“Crossfit”下的所有孩子。所以在使用 Firebase-UI 库的时候,就意味着只能让子级深一层。根据您的架构,您的数据是两级深度的,明白吗?

APR_10_2021 -> 10_12 -> Data

有两种方法可以解决这个问题。您拥有的第一个选项是创建一个名为“allCrossfits”的新节点,您应该在其中添加所有“TrainingTrainerCollector”对象。这种做法称为非规范化,是 Firebase 的常见做法。如果您是 NoSQL 数据库的新手,我建议您观看此视频,Denormalization is normal with the Firebase Database 以获得更好的理解。

因此,您的新参考应该如下所示:

DatabaseReference mbase =  FirebaseDatabase.getInstance().getReference().child("allCrossfits");

这个引用应该被传递给“选项”对象。

您拥有的第二个选项是从数据库树中删除“时间”级别,因为它已经存在于您的“时间”字段中。所以新的架构应该如下所示:

Firebase-root
  |
  --- Crossfit
        |
        --- APR_10_2021
        |    |
        |    --- Current_Participant: "0"
        |    |
        |    --- Date: "APR 10 2021"
        |    |
        |    --- Max_Participant: "5"
        |    |
        |    --- Time: "10:00-12:00"
        |
        --- APR_14_2021
             |
             --- //Data

在这种情况下,您只需更改将数据添加到数据库的方式。您实际的“mbase”引用会非常好。

【讨论】:

谢谢大家,我所做的,除了当前的数据库之外,我还添加了适用于执行此操作的其他数据库流。

以上是关于Android - FirebaseRecyclerOptions 在数据库中递归的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

android 21 是啥版本

Android逆向-Android基础逆向(2-2)

【Android笔记】android Toast

图解Android - Android核心机制

Android游戏开发大全的目录