Firebase中的嵌套列表

时间:2016-04-07 11:56:45

标签: java android firebase firebase-realtime-database

尝试了解如何在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);
    }
  }
}

但它失败了:

  

引起:com.fasterxml.jackson.databind.JsonMappingException:可以   不要将START.OBJECT中的java.util.ArrayList实例反序列化   令牌

1 个答案:

答案 0 :(得分:4)

啊,只需要使用Map代替List

就我而言:

public class Message {
  private Long authorID;
  private String msg;
  private Map<String, Boolean> receivedBy;
  private Map<String, Boolean> readBy;
}

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