代码
Query mSeenRef = mDatabaseReference.child("Messages").child(MessageRecieverId).child(MessageSenderId).orderByChild("From").equalTo(MessageRecieverId);
这是查询,如果此查询为真,我想更改另一个子项...类似于添加值事件监听器并获取上面的查询数据...只是我想更改数据而不是获取数据,但我无法在 value 事件监听器中使用 setValue 方法,那么我该怎么办?
我在 MessageRecieverId 中也有 UIDS,里面是 From
最佳答案
尝试以下操作:
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
关于java - 根据查询更改 firebase 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52903484/