java - firebase 中的用户组

标签 java android firebase firebase-realtime-database

用户定义为:

public class User {
  private String email;
  private String uid;
  private List<Group> groups;

  public User(String email, String uid) {
    this.email = email;
    this.uid = uid;
    this.groups = new ArrayList<>();
  }

  public User() {}

  public User(String email, String uid, ArrayList<Group> groups) {
    this.email = email;
    this.uid = uid;
    this.groups = groups;
  }

  public String getEmail() {
    return email;
  }

  public String getUid() {
    return uid;
  }

  public List<Group> getGroups() {
    return groups;
  }

  public void addGroup(Group group) {
    if (this.groups == null) {
      this.groups = new ArrayList<>();
    }
    this.groups.add(group);
  }
}

Group 定义为:

public class Group {
  private List<User> memberList;

  private Group() {
  }

  public Group(List<User> users) {
    this.memberList = users;
  }

  public void addMember(User member) {
    this.memberList.add(member);
  }

  public List<User> getMemberList() {
    return memberList;
  }
}

尝试保存到 firebase 时,会出现运行时错误:

java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/JsonMappingException
                                                                             at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:611)

问题与循环引用有关,还是 Firebase 无法以这种方式存储数据?

最佳答案

是的,我认为问题出在循环引用上。在有循环引用的地方,序列化总是有问题。

正如我们所见,用户和组之间存在双向关系。根据official documentation您可以将结构改进为:

{
  "users": {
    "user1": {
      "name": "User 1",
      "groups": {
         "group1": true,
         "group2": true,
         "group3": true
      },
    "user2": {
      "name": "User 2",
      "groups": {
         "group2": true,
         "group3": true
      }
    },
    ...
  },
  "groups": {
    "group1": {
      "name": "Group 1",
      "members": {
        "user1": true
      },
    "group2": {
      "name": "Group 2",
      "members": {
        "user1": true,
        "user2": true
      },
    "group3": {
      "name": "Group 3",
      "members": {
        "user1": true,
        "user2": true
      }
    },
    ...
  }
}

关于java - firebase 中的用户组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38213006/

相关文章:

java - 在 Java 中生成 SAS token 以下载 Azure 数据存储容器中的文件

android - 关闭应用程序时停止 AsyncTask

android - 将菜单背景设置为不透明

java - 用计时器改变圆圈的颜色

firebase - 将Firebase文档快照映射到需要键和值并将其作为流提供的自定义模型

适用于 Mac 的 Java 应用程序

Java Lists 列表项值

java - 高效的 TableModel 实现

android - 使用 Firebase Cloud Firestore 数据库

javascript - Express session 不适用于 Firebase 托管