更新多个Firebase节点

and*_*lic 5 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) {

            }
        });

    }
Run Code Online (Sandbox Code Playgroud)

这是Firebase数据结构

Ros*_*des 3

那是因为您的数据库引用仍然指向树的根。您应该为其分配所需的路径reference

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

private void updatemultiplefirebasedata() {
        FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
        final DatabaseReference reference = firebaseDatabase.getReference().child("schedule").child("22-12-2017").child("route").child("1").child("kid").child("21");
        reference.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) {

            }
        });

    }
Run Code Online (Sandbox Code Playgroud)

  • @UmarHussain 好点。请随意点击编辑按钮并相应地更新我的答案。 (2认同)