Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Firebase:在不可能覆盖的情况下向数组添加值_Java_Android_Arrays_Firebase_Firebase Realtime Database - Fatal编程技术网

Java Firebase:在不可能覆盖的情况下向数组添加值

Java Firebase:在不可能覆盖的情况下向数组添加值,java,android,arrays,firebase,firebase-realtime-database,Java,Android,Arrays,Firebase,Firebase Realtime Database,我有一个类似这样的模型的消息应用程序 public class Message { String message; List<String> reads; ... more logics } ... [ "myGeneratedMessageId" : { "from":"userId1", "reads":[ "userId2", "userId3" ] },

我有一个类似这样的模型的消息应用程序

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

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

]
当用户看到它时,应该将用户的id添加到数组中。如果多个用户同时看到该数组,我是否需要担心覆盖该数组中的值?我该怎么做才能让它不发生呢

为了澄清

用户1看到消息->将用户id发送到该数组(我猜是通过将其添加到本地数组,然后在Firebase上更新消息上的子级)

用户2在用户1更新消息之前看到该消息,也在更新消息-只将其id添加到数组中,并更新Firebase上的子级

编辑:更新使用情况(潜在问题仍然存在) 我用
id:boolean将
读入一个hashmap

 ... 
 "message": "Hello world!",
 "from": "userId1",
 "reads":[
     "userId2": true,
     "userId3": true
 ], ...
内部模型
markAsRead()

if(reads==null){

reads=new HashMap();如果我理解正确,您会担心firebase数据库的并发更新

如果是这样,您可以查看该部分

并检查以下答案:


使用数组时,多用户冲突的可能性很大。这是和的众多原因之一。但您拥有的看起来可能是,这非常方便地解决了您概述的问题。我认为如果您进行更改(当用户阅读时),问题将得以避免直接添加到数据库中,而不首先将其添加到本地
HashMap
中。我的意思是使用
…getReference(“myGeneratedMessageId/reads/”+user.getUid)。setValue(true)
。由于消息对象持续同步,因此read
HashMap
的值也将更新
if(reads == null) {
   reads = new HashMap<String, Boolean>(); <-- could cause problem
} 

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

.. save logics