根据查询更改Firebase数据

时间:2018-10-20 07:38:47

标签: java android database firebase firebase-realtime-database

代码

Query mSeenRef = mDatabaseReference.child("Messages").child(MessageRecieverId).child(MessageSenderId).orderByChild("From").equalTo(MessageRecieverId);

这是查询,如果此查询为真,我想更改另一个子项...类似于添加值事件侦听器并从上面获取此查询数据...只是获取而不是我想更改数据不能在值事件监听器中使用setValue方法,该怎么办?

我在MessageRecieverId里面也有UIDS,里面是From

enter image description here

1 个答案:

答案 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