CONTEXT
我目前正在开发Firebase应用程序(在Android中) . 我已经设置了身份验证,存储和数据库,没有任何问题可言 . 由于Firebase身份验证用户只有一些属性,我创建了一个“用户”POJO来存储Firebase身份验证用户中未包含的其他用户信息(即名字,出生日期,国籍等...) . 其结构如下图所示:
图像中的UUID是用户各自的身份验证 . 这是通过以下方式实现的:
ref.child(users).child(auth.getUid()).setValue(user);
这种方法似乎与文档一致,因为它允许我使用 auth.uid === $uid
规则限制对帐户所有者的写入/读取 . 此外,树内的所有属性都按预期映射到我的POJO .
问题
我的一个大问题是我想将用户uid存储在POJO中 . 由于UID当前被构造为父对象,我不确定如何将其映射到用户POJO . 我当然可以在底层树中存储一个额外的字段 . 但是,这似乎是毫无意义的数据冗余 .
题
将uid映射到相应的“用户”POJO类的最佳方法是什么 . 理想情况下,我可以获取10个用户进行显示,当点击一个用户时,应用程序会加载配置文件活动 . 这意味着传递用户的uid,所以我可以说:
ref.child(users).child(targetUID)
并获取已点击的用户帐户 . 这意味着拥有他们的uid .
2 回答
我在使用
FirebaseRecyclerAdapter
时遇到了同样的问题,所以我复制了代码并添加了以下方法,因为适配器存储了快照 .现在您可以使用setter设置用户的UID .
EDIT : 我正在思考这些问题
User.java
并在您的Firebase适配器中
populateView()
我用两种方法来解决这个问题 . 一个是拥有额外的字段,因此具有冗余,另一个是使用HashMap将用户的POJO映射到它的UID .
如果你注意到每当你从Firebase数据库加载数据时,主要是以Map的形式,所以我所做的只是将密钥保存到Map,后者使用该密钥映射用户的POJO . 该 Map 存储在一个单独的地方,因此可以从应用程序的任何位置访问它 .
像这样的东西 -
这样我只需使用UID(
getSingletonMap().get(uid)
)或get the uid of a user即可获得用户 . 我希望这回答了你的问题 .