Firebase中的嵌套列表

Mtl*_*Dev 3 java android firebase firebase-realtime-database

试图了解如何在Firebase中实现嵌套列表。

可以解决的问题:1-to-N消息传递系统,对于每个消息,您希望维护一个已接收和阅读该消息的用户列表。

阅读了“ Firebase中阵列的最佳实践”。尝试避免使用数组,因为我要同时进行写操作,而在这里似乎并不是一个好的选择。

当前试图通过在每个消息下存储子树来实现此目的,每个子树是已接收,读取或以其他方式对消息Y执行某些操作X的用户列表

"msgid0" : {
        "authorID": "uid0",
        "msg"     : "message text",
        "ReceivedBy": {
           uid1 : true,
           uid2 : true
         }
        "ReadBy" :    {
           uid1 : true
        }
}
Run Code Online (Sandbox Code Playgroud)

问题:是否可以将这样的嵌套数据结构直接放入单个对象中?

我正在粗略尝试以下测试用例:

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);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是它失败了:

引起原因:com.fasterxml.jackson.databind.JsonMappingException:无法从START_OBJECT令牌中反序列化java.util.ArrayList实例

Mtl*_*Dev 5

啊,只需要使用Map而不是即可List

就我而言:

public class Message {
  private Long authorID;
  private String msg;
  private Map<String, Boolean> receivedBy;
  private Map<String, Boolean> readBy;
}
Run Code Online (Sandbox Code Playgroud)

现在,我了解了如何在Firebase中使用递归结构。猜猜就像大多数事情一样,这很容易-一旦知道了。