【问题标题】:Firebase - Multi Path Update using Transactions in Android StudioFirebase - 在 Android Studio 中使用事务进行多路径更新
【发布时间】:2020-05-01 23:12:55
【问题描述】:

我最近开始在 Android Studio 上使用 FirebaseDatabase 库。因此,我已经读到,当您更新/修改 Firebase 数据库上的多个位置时,以防发生任何错误,并确保数据在某些位置没有被修改,并且在其他事务中没有被修改> 被使用。

JavaScript 中的事务已被彻底覆盖,并提供了适当的文档。但是,Android Studio 库的文档不是很清楚。链接是link1link2


什么是可变数据,它有什么价值?现在,这就是我更新或修改数据库中数据的方式。我需要更新节点帖子和用户的值

HashMap<String, Object> hm = new HashMap<>();
hm.put("/users/"+key+"/name/","New Name");
hm.put("/posts/"+key+"/number_of_posts/", 2);
FirebaseDatabase.getInstance().getReference().updateChildren(hm, new DatabaseReference.CompletionListener() {
    @Override
    public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
        if(databaseError == null)
            Log.d(TAG, "TASK WAS SUCCESSFULLY COMPLETED");
        else
            Log.d(TAG, "SOMETHING WENT WRONG");
    }
});

我知道这样做是错误的,因此解释或指向教程的链接将非常有帮助。

【问题讨论】:

标签: android firebase transactions firebase-realtime-database


【解决方案1】:

所以显然这毕竟是正确的方法。每当您需要执行多路径更新时,您都可以使用 Hash-Map 和函数 updateChildren(hashMap)。完成侦听器是可选的,可以添加。 https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html

【讨论】:

    【解决方案2】:

    现在可以通过引入ServerValue.increment() 将多路径更新与事务结合起来

    HashMap<String, Object> hm = new HashMap<>();
    hm.put("/users/"+key+"/name/","New Name");
    hm.put("/posts/"+key+"/number_of_posts/", ServerValue.increment(2));
    FirebaseDatabase.getInstance().getReference().updateChildren(hm);
    

    Link to release notes

    【讨论】:

      猜你喜欢
      • 2018-05-10
      • 2018-12-01
      • 2017-01-10
      • 1970-01-01
      • 2017-11-12
      • 2017-11-13
      • 2020-07-07
      • 2019-02-04
      • 2020-04-15
      相关资源
      最近更新 更多