Android - 数据库中递归的 FirebaseRecyclerOptions

Android - FirebaseRecyclerOptions recursive in the the db

我有点卡住了,要创建 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

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

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

这意味着您正在尝试阅读“Crossfit”下的所有children。所以在使用Firebase-UI库的时候,就意味着只能深入到children一级。根据您的模式,您的数据是 two-level 深,看到了吗?

APR_10_2021 -> 10_12 -> Data

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

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

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

此引用应传递给“选项”object。

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

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”参考将完全没问题。