java - runtransaction - tipos de datos firebase
Listas anidadas en Firebase (1)
Esta pregunta ya tiene una respuesta aquí:
Intentando comprender cómo implementar listas anidadas en Firebase.
Problema que se puede reducir a: un sistema de mensajes de 1 a N, donde, para cada mensaje, desea mantener una lista de los usuarios que han recibido y leído ese mensaje.
He leído "Mejores prácticas para matrices en Firebase" . Tratando de evitar matrices, ya que tengo escrituras simultáneas, y simplemente no parecen una buena opción aquí.
Actualmente estamos tratando de lograr esto almacenando subárboles debajo de cada mensaje, cada subárbol es una lista de usuarios que han recibido, leído o realizado alguna acción X en el mensaje Y
"msgid0" : {
"authorID": "uid0",
"msg" : "message text",
"ReceivedBy": {
uid1 : true,
uid2 : true
}
"ReadBy" : {
uid1 : true
}
}
Pregunta: ¿Es posible poner una estructura de datos anidada como esta, directamente en un solo objeto?
Estoy probando crudamente un caso de prueba con lo siguiente:
public class Message {
private Long authorID;
private String msg;
private List<String> receivedBy;
private List<String> readBy;
}
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot i: dataSnapshot.getChildren()){
Message_FB msg = i.getValue(Message_FB.class);
}
}
}
Pero falla con:
Causado por: com.fasterxml.jackson.databind.JsonMappingException: no se puede deserializar la instancia de java.util.ArrayList fuera del token START_OBJECT
Ah, solo necesitaba usar Map
lugar de List
.
En mi caso:
public class Message {
private Long authorID;
private String msg;
private Map<String, Boolean> receivedBy;
private Map<String, Boolean> readBy;
}
Ahora entiendo cómo usar estructuras recursivas con Firebase. Adivina como la mayoría de las cosas, es fácil, una vez que sabes cómo.