Android-FirebaseRecyclerOptions在数据库中递归



我有点拘泥于创建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.pnghttps://i.stack.imgur.com/1CW2U.png

对于实际的数据库结构,您无法做到这一点。当您使用以下参考时:

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

这意味着你正在努力阅读";Crossfit";。因此,当使用Firebase UI库时,这意味着您只能获得一级深度的子级。根据您的模式,您的数据是两级深度的,看到了吗?

APR_10_2021 -> 10_12 -> Data

有两种方法可以解决这个问题。第一个选项是创建一个名为"的新节点;allCrossfits";你应该把所有的";TrainingTrainerCollector";对象。这种做法被称为反规范化,是Firebase的常见做法。如果你是NoSQL数据库的新手,我建议你看这段视频,为了更好地理解Firebase数据库,去规范化是正常的。

所以,你的新参考应该是这样的:

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";参考资料会很好。

相关内容

  • 没有找到相关文章

最新更新