Jam*_*ieB 8 java android firebase firebase-realtime-database
A User定义为:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
尝试保存到firebase时,这会产生运行时错误:
java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/JsonMappingException
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:611)
Run Code Online (Sandbox Code Playgroud)
问题与循环引用有关,或Firebase无法以这种方式存储数据?
是的我认为问题在于循环参考.如果存在循环引用,则始终存在序列化问题.
我们可以看到用户和组之间存在双向关系.根据官方文档,您可以改进结构:
{
"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
}
},
...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1555 次 |
| 最近记录: |