Jac*_*ton 9 java mapping android firebase firebase-realtime-database
CONTEXT
我目前正在开发Firebase应用程序(在Android中).我已经设置了身份验证,存储和数据库,没有任何问题可言.由于Firebase身份验证用户只有一些属性,我创建了一个"用户"POJO来存储Firebase身份验证用户中未包含的其他用户信息(即名字,出生日期,国籍等...) .其结构如下图所示:

图像中的UUID是用户各自的身份验证.这是通过以下方式实现的:
ref.child(users).child(auth.getUid()).setValue(user);
Run Code Online (Sandbox Code Playgroud)
这种方法似乎与文档一致,因为它允许我使用auth.uid === $uid规则限制对帐户所有者的写入/读取.此外,树内的所有属性都按预期映射到我的POJO.
问题
我的一个大问题是我想将用户uid存储在POJO中.由于UID当前被构造为父对象,我不确定如何将其映射到用户POJO.我当然可以在底层树中存储一个额外的字段.但是,这似乎是毫无意义的数据冗余.
题
将uid映射到相应的"用户"POJO类的最佳方法是什么.理想情况下,我可以获取10个用户进行显示,当点击一个用户时,应用程序会加载配置文件活动.这意味着传递用户的uid,所以我可以说:
ref.child(users).child(targetUID)
Run Code Online (Sandbox Code Playgroud)
并获取已点击的用户帐户.这意味着拥有他们的uid.
我在使用时遇到了同样的问题FirebaseRecyclerAdapter,因此我复制了代码并添加了以下方法,因为适配器存储了快照。
public String getItemKey(int position) {
return mSnapshots.getItem(position).getKey();
}
Run Code Online (Sandbox Code Playgroud)
现在您可以使用 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;
}
}
Run Code Online (Sandbox Code Playgroud)
在您的 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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9815 次 |
| 最近记录: |