上下文
我目前正在开发一个 Firebase 应用程序(在 Android 中)。我已经设置了身份验证、存储和数据库,没有任何问题可言。由于 Firebase 身份验证用户只有几个属性,我创建了一个“用户”POJO 来存储 Firebase 身份验证用户中未包含的其他用户信息(即名字、出生日期、国籍等...) .其结构如下图所示:
图中的UUID是用户各自的auth uid。这是这样实现的:
ref.child(users).child(auth.getUid()).setValue(user);
这种方法似乎与文档一致,因为它允许我使用 auth.uid === $uid
规则将写入/读取限制为帐户所有者。此外,树中的所有属性都按预期映射到我的 POJO。
问题
我的一个大问题是我想将用户 uid 存储在 POJO 中。由于 UID 当前被构造为对象父对象,我不确定如何将它映射到用户 POJO。我当然可以在底部树级别存储一个附加字段。然而,这似乎是毫无意义的数据冗余。
问题
将 uid 映射到相应“用户”POJO 类的最佳方法是什么。理想情况下,我能够获取 10 个用户进行显示,当一个用户被点击时,应用程序会加载一个配置文件 Activity 。这意味着传递用户的 uid,所以我可以说:
ref.child(users).child(targetUID)
并获取点击的用户帐户。这意味着拥有他们的 uid。
最佳答案
我在使用 FirebaseRecyclerAdapter
时遇到了同样的问题,所以我复制了代码并添加了以下方法,因为适配器存储了快照。
public String getItemKey(int position) {
return mSnapshots.getItem(position).getKey();
}
现在您可以使用 setter 设置用户的 UID。
编辑: 我在想一些类似的事情
用户.java
public class User {
private String name;
private String email;
private String UID;
public User() {
}
public String getUID() {
return UID;
}
public void setUID(String UID) {
this.UID = UID;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
并且在您的 Firebase 适配器的 populateView()
String UID;
FirebaseListAdapter<User> searchAdapter = new FirebaseListAdapter<User>(getActivity(), User.class, R.layout.user_layout, mRef) {
@Override
protected void populateView(View v, User model, int position) {
// If you really need to set the UID here
// model.setUID = getRef(position).getKey();
// Otherwise, I would just set a String field as shown
//and pass it with the intent to get the UID
//in the profile Activity
UID = getRef(position).getKey
((TextView) v.findViewById(R.id.text1)).setText(model.getName());
((TextView) v.findViewById(R.id.text2)).setText(model.getEmail());
v.setOnClickListener(MainActivity.this);
}
};
@Override
public void onClick(View v) {
Intent intent = new Intent(this, ProfileActivity.class);
intent.putStringExtra(UID_EXTRA, UID);
startActivity(intent);
}
关于java - 如何将用户 UID 存储在 firebase 数据库中并将其映射到 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38276447/