Grupo de usuarios en firebase

Un User se define como:

 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 se define como:

 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; } } 

Al intentar guardar en firebase, esto da un error de tiempo de ejecución de:

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

¿El problema tiene que ver con referencias circulares o Firebase no puede almacenar datos de esta manera?

Sí creo que el problema es con referencia circular. Donde hay referencia circular, siempre hay problema con la serialización.

Como podemos ver, usted tiene una relación bidireccional entre Usuarios y Grupos. Según la documentación oficial se puede mejorar la estructura como:

 { "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 } }, ... } } 
  • Mostrar Light AlertDialog usando Theme.Light.NoTitleBar
  • Servicio para la pantalla de bloqueo antes de abrir la aplicación
  • Fuentes personalizadas y diseños XML (Android)
  • Array List Intent extra en Java
  • ¿Cómo obtengo el tamaño del archivo de temp en android?
  • Android, agregue una nueva vista sin diseño XML
  • ¿Cómo desactivo explícitamente el modo de flujo en bloque para las conexiones HTTP en Android?
  • Reintentar una conexión http
  • En Java, cómo obtener cadenas de días de la semana (Sun, Mon, ..., Sat) con el sistema de configuración por defecto (idioma)
  • Cómo utilizar los componentes de la arquitectura ViewModel dentro de RecyclerView Adapter?
  • Resultados inesperados implementando desenfoque de movimiento simple en Libgdx
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.