java - 如何将用户 UID 存储在 firebase 数据库中并将其映射到 POJO

标签 java android firebase mapping firebase-realtime-database

上下文

我目前正在开发一个 Firebase 应用程序(在 Android 中)。我已经设置了身份验证、存储和数据库,没有任何问题可言。由于 Firebase 身份验证用户只有几个属性,我创建了一个“用户”POJO 来存储 Firebase 身份验证用户中未包含的其他用户信息(即名字、出生日期、国籍等...) .其结构如下图所示:

demo of structure

图中的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/

相关文章:

java - 如何使用 Selenium 和 Java 在网页上查找文本并获取其 XPath 或 CSS

java - 如何从jsp文件中调用java文件中带参数的函数?

java - firestore 快照监听器的生命周期和定价之间有什么关系?

android - Firebase订单通过时间戳实际未订购

android - webapp 不会与 android app 一起出现在 firebase 仪表板上

firebase - 当用户具有正确的权限时从 onsnapshot 错误中获取 'FirebaseError: Missing or insufficient permissions.'

java - Java中的变量默认值

java - JTS 中的地理数据类型

java - 如何修复 POST 请求 Retrofit 上的错误 400

android - 如何将按钮的背景设置回 default_holo_dark