我有一个消息应用程序,其模型如下所示
public class Message {
String message;
List<String> reads;
... more logics
}
在 firebase 上它看起来像这样
... [
"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<String, Boolean>(); <-- could cause problem
}
if(reads.get(userId) == null) {
reads.put(userId, true);
}
.. save logics
如果没有 HashMap ,用户仍然可以创建 HashMap ,从而使其他用户的新 HashMap 重写它。
最佳答案
如果我理解正确的话,您担心的是 Firebase 数据库上的并发更新。
如果是这样,您可以检查该部分
并检查这个答案:
Firebase - Multiple users simultaneously updating same object using its old value
关于java - Firebase:将值添加到数组而不可能覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42283461/