我正在使用Firebase开发一个Android聊天应用程序,我想将所有未看到的消息设置为“已看到”。
在消息下:第一个节点是发送者ID,第二个节点是接收者ID,第三个节点是消息ID。
我想将“ seen”字段的值为“ false”的所有消息都设置为“ true”。
该列表的Firebase参考为:
DatabaseReference userMessages = mRootRef.child("Messages").child(mCurrentUser.getUid()).child(mPartnerID);
问题:如何将"seen": false
设置为"seen": true
的所有条目?
感谢您的帮助!
答案 0 :(得分:2)
要解决此问题,请使用以下代码行:
DatabaseReference userMessages = mRootRef.child("Messages").child(mCurrentUser.getUid()).child(mPartnerID);
Query query = query.orderByChild("seen").equalsTo(false);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
ds.child("seen").getRef().setValue(true);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {}
};
query.addListenerForSingleValueEvent(valueEventListener);
答案 1 :(得分:1)
另一种更新方法是使用updateChildren()
:
DatabaseReference userMessages = mRootRef.child("Messages").child(mCurrentUser.getUid()).child(mPartnerID);
userMessages.orderByChild("seen").equalTo(false).addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
String key=datas.getKey();
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put(key+"/seen/", true);
userMessages.updateChildren(childUpdates);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
这里您在mPartnerID
处添加了引用,然后添加了一个查询以能够检索所有以seen:false
作为子代的键,并使用updateChildren()
更新seen
字段。
在此处查看更多信息:
https://firebase.google.com/docs/database/android/read-and-write#update_specific_fields