代码
Query mSeenRef = mDatabaseReference.child("Messages").child(MessageRecieverId).child(MessageSenderId).orderByChild("From").equalTo(MessageRecieverId);
这是查询,如果此查询为真,我想更改另一个子项...类似于添加值事件侦听器并从上面获取此查询数据...只是获取而不是我想更改数据不能在值事件监听器中使用setValue方法,该怎么办?
我在MessageRecieverId里面也有UIDS,里面是From
答案 0 :(得分:1)
尝试以下操作:
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
Query mSeenRef = db.child("Messages").child(MessageRecieverId).child(MessageSenderId).orderByChild("From").equalTo(MessageRecieverId);
mSeenRef.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
if(dataSnapshot.exist()) {
for(DataSnapshot ds: dataSnapshot.getChildren()){
String keyId=ds.getKey();
DatabaseReference ref= db.child("Messages").child(MessageRecieverId).child(MessageSenderId).child(keyId);
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("Seen", true);
ref.updateChildren(childUpdates);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
这将使用dataSnapshot.exists()
检查查询是否存在于数据库中,然后如果该查询存在,则可以更改子项的值。您只需使用方法updateChildren()
即可更新一个属性。
在此处查看更多信息:
https://firebase.google.com/docs/database/android/read-and-write#update_specific_fields