我已经访问了此Users节点的子节点。但是,每次我尝试更新一个孩子的得分和分析时,其他孩子都会受到影响,导致另一个孩子具有相同的价值。
这是我用来访问“用户”下分数的子代的代码
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("Users").orderByChild("username");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Map<String, Object> map = (Map<String, Object>) ds.getValue();
map.put("score", total);
ds.getRef().updateChildren(map);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("TAG", databaseError.getMessage());
}
};
query.addListenerForSingleValueEvent(valueEventListener);
这是我用来访问“用户”下的孩子进行分析的代码
DatabaseReference dr = FirebaseDatabase.getInstance().getReference();
Query q = dr.child("Users").orderByChild("username");
ValueEventListener vel = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Map<String, Object> map = (Map<String, Object>) ds.getValue();
map.put("analysis", sev);
ds.getRef().updateChildren(map);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("TAG", databaseError.getMessage());
}
};
q.addListenerForSingleValueEvent(vel);
}
我必须在不影响其他孩子的情况下更新分析和得分
答案 0 :(得分:1)
使用equalTo(theusername)
指定您要获取访问权限更新的用户:
因此查询将是:
Query query = rootRef.child("Users").orderByChild("username").equalTo(theusername).child("score");
//或analysis
代替score
在您的听众中:
ValueEventListener vel = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
// update the value here ...
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("TAG", databaseError.getMessage());
}
};
q.addListenerForSingleValueEvent(vel);