java - Firebase:将值添加到数组而不可能覆盖

标签 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 看到消息 -> 将用户 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 数据库上的并发更新。

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

Save data as transactions

并检查这个答案:

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

关于java - Firebase:将值添加到数组而不可能覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42283461/

相关文章:

c++ - 在 C++ 中如何使用另一个类的属性

php - 通知: Undefined index of a xml

arrays - 使用 MLAB API 更新数组内容?

java - 如何按依赖关系顺序正确加载项目的类?

android - 一个 WorkSpace 用于多个应用程序

android - Android 中 Activity 之间的 3D 动画

android - 3.2 之前的设备的 smallestScreenWidthDp?

java - 在 heroku 上部署 maven 应用程序,BeanDefinitionStoreException

java - Java中子类中过滤掉父类的记录

java - SQLiteBlobTooBigException - 华为设备、Android 9 和 10