Firebase:向数组添加值而不可能覆盖

时间:2017-02-16 19:57:59

标签: java android arrays firebase firebase-realtime-database

我有一个消息传递应用程序,模型看起来像这样

public class Message {
    String message;
    List<String> reads;

    ... more logics
}

在firebase上它看起来像这样

... [ 
   "myGeneratedMessageId" : {
       "from":"userId1",
       "reads":[
          "userId2",
          "userId3"
       ]
   }, ...

]

当用户看到它时,应将用户的id添加到数组中。如果多个用户同时看到它,我是否必须担心覆盖该数组中的值?我该怎么做才能做到这一点?

澄清,

用户1看到消息 - &gt;将用户ID发送到该数组(我想通过将其添加到本地数组,然后在Firebase上的消息上更新该子项)

用户2在用户1更新之前看到该消息,也更新它 - 只将他的ID添加到数组并更新Firebase上的子项

编辑:更新后的使用情况(潜在问题仍然存在)

我将reads放入带有id : boolean

的哈希映射中
 ... 
 "message": "Hello world!",
 "from": "userId1",
 "reads":[
     "userId2": true,
     "userId3": true
 ], ...

内部模型markAsRead()

if(reads == null) {
   reads = new HashMap<String, Boolean>(); <-- could cause problem
} 

if(reads.get(userId) == null) {
   reads.put(userId, true);
}

.. save logics

如果没有,则用户仍然可以创建散列图,使其他用户的新散列图重写它。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您会担心firebase数据库的并发更新。

如果是这样,你可以查看

部分

Save data as transactions

并检查这个答案:

Firebase - Multiple users simultaneously updating same object using its old value