Firebase 中的嵌套列表
Nested Lists in Firebase
试图了解如何在 Firebase 中实现嵌套列表。
问题可归结为:一个 1 对 N 消息传递系统,其中,对于每条消息,您希望维护一个已接收和阅读该消息的用户列表。
已阅读 "Best Practices for Arrays in Firebase"。尽量避免数组,因为我有同时写入,而且它们在这里似乎不是一个好的选择。
目前正在尝试通过在每条消息下存储子树来实现此目的,每个子树都是已接收、阅读或以其他方式执行过某些操作的用户列表 X 消息 Y
"msgid0" : {
"authorID": "uid0",
"msg" : "message text",
"ReceivedBy": {
uid1 : true,
uid2 : true
}
"ReadBy" : {
uid1 : true
}
}
问题:是否可以将这样的嵌套数据结构直接放入单个对象中?
我正在粗略地尝试使用以下内容进行测试:
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);
}
}
}
但它失败了:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can
not deserialize instance of java.util.ArrayList out of START_OBJECT
token
啊,只需要使用 Map
而不是 List
。
就我而言:
public class Message {
private Long authorID;
private String msg;
private Map<String, Boolean> receivedBy;
private Map<String, Boolean> readBy;
}
现在我了解了如何在 Firebase 中使用递归结构。与大多数事情一样,猜测很容易——一旦您知道如何去做。
试图了解如何在 Firebase 中实现嵌套列表。
问题可归结为:一个 1 对 N 消息传递系统,其中,对于每条消息,您希望维护一个已接收和阅读该消息的用户列表。
已阅读 "Best Practices for Arrays in Firebase"。尽量避免数组,因为我有同时写入,而且它们在这里似乎不是一个好的选择。
目前正在尝试通过在每条消息下存储子树来实现此目的,每个子树都是已接收、阅读或以其他方式执行过某些操作的用户列表 X 消息 Y
"msgid0" : {
"authorID": "uid0",
"msg" : "message text",
"ReceivedBy": {
uid1 : true,
uid2 : true
}
"ReadBy" : {
uid1 : true
}
}
问题:是否可以将这样的嵌套数据结构直接放入单个对象中?
我正在粗略地尝试使用以下内容进行测试:
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);
}
}
}
但它失败了:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
啊,只需要使用 Map
而不是 List
。
就我而言:
public class Message {
private Long authorID;
private String msg;
private Map<String, Boolean> receivedBy;
private Map<String, Boolean> readBy;
}
现在我了解了如何在 Firebase 中使用递归结构。与大多数事情一样,猜测很容易——一旦您知道如何去做。