Firebase - 使用Android Studio中的事务进行多路径更新

时间:2017-02-15 23:16:46

标签: android firebase transactions firebase-realtime-database

我最近开始在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");
    }
});

我知道这是做错的方法,所以解释或指向教程的链接会非常有用。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

现在可以通过引入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