我需要更新从服务器端发布的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) {
}
});
}
答案 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"
的新键