更新多个Firebase节点

时间:2017-12-28 07:29:34

标签: android firebase firebase-realtime-database

我需要更新从服务器端发布的firebase数据中的几个节点。需要从设备端更新节点“is_done”到0/1。我尝试过不同的解决方案但是所有这些都变得徒劳无功,即它在“计划”节点之外添加了一个不同的节点。

我尝试过的代码段

private void updatemultiplefirebasedata() {
        FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
        final DatabaseReference reference = firebaseDatabase.getReference();
        Query query = reference.child("schedule").child("22-12-2017").child("route").child("1").child("kid").child("21");
        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {
                    for(DataSnapshot d : dataSnapshot.getChildren()) {
                        Log.d("Keys",String.valueOf(d.getKey())); //returning all the keys
                        HashMap<String, Object> result = new HashMap<>();
                        result.put("is_done", "0");
                    reference.child(String.valueOf(d.getKey())).updateChildren(result);  //update according to keys
                    }
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }

This is the firebase data structure

2 个答案:

答案 0 :(得分:2)

那是因为您的数据库引用仍然指向树的根。您应该为for user in $(cut -f1 -d: /etc/passwd); do echo $user; sudo crontab -u $user -l; done 分配所需的路径。

另外:您不需要查询即可直接访问数据。您只需将侦听器附加到数据库引用即可。

reference

答案 1 :(得分:0)

试试这个:

reference.child(d.getKey()).updateChildren(result);  

从子项中删除String.valueOf,因为您的键是整数,并且您将其作为字符串传递,因此不会将其指向同一child,而是创建具有String "1"的新键