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 用户权限 )