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)
。由于消息对象持续同步,因此readHashMap
的值也将更新
if(reads == null) {
reads = new HashMap<String, Boolean>(); <-- could cause problem
}
if(reads.get(userId) == null) {
reads.put(userId, true);
}
.. save logics