使用FirebaseRecyclerOptions检索回收器视图中的多个数据



我在调用数据库时使用FirebaseRecyclerOptions,但是,我无法获取数据库中的所有数据。这是数据库的结构:数据库结构黄色下划线是用户id(UID(,下面是另一个节点,它包含我想在RecyclerView中检索的数据。

这是代码的一个片段

FirebaseRecyclerOptions<RegisterParking> options =
new FirebaseRecyclerOptions.Builder<RegisterParking>()
.setQuery(FirebaseDatabase.getInstance().getReference().child("RegParkingArea"), RegisterParking.class)
.build();
voPListAdapter = new VoPListAdapter(options);
recyclerView.setAdapter(voPListAdapter);

当您将以下两个参数传递给setQuery((方法时:

.setQuery(FirebaseDatabase.getInstance().getReference().child("RegParkingArea"), RegisterParking.class)

这意味着适配器希望在屏幕上呈现RegisterParking对象。如果仔细查看数据库模式,在RegParkingArea节点下,可以找到UID和而不是RegisterParking对象。要在RecycerView中显示的对象存在于每个UID下。因此,当从数据库中读取数据时,Firebase UI库会尝试将上述引用下的每个子对象映射到RegisterParking类型的对象中,这实际上是不可能的,因为UID是字符串。

因此,如果允许您更改数据库模式,那么您应该取消数据的规范化,基本上是将数据复制到另一个节点下,或者将实际数据更改为:

db-root
|
--- RegParkingArea
|
--- $pushedId
|
--- uid: "4u9h...XrP2"
|
--- //other fields.

基本上,我已经从数据库树中删除了一个级别。如果您将使用这个模式,那么您可以保持代码的原样,一切都会很好地工作。

还有一件事需要注意,如果你需要获得特定用户的所有停车位,那么你可以使用以下查询:

DatabaseReference db = FirebaseDatabase.getInstance().getReference();
Query queryByUid = db.child("RegParkingArea").orderByChild("uid").equalTo(uid);

相关内容

  • 没有找到相关文章

最新更新