我正在开发一个使用Firebase的Android聊天应用程序,我想将所有看不到的消息设置为“已见”。
在Messages下:第一个节点是发送方id,第二个节点是接收方id,第三个节点是消息id。
我想设置所有消息,其中“set”字段的值为"false",设置为"true“。
该列表的Firebase引用为:
DatabaseReference userMessages = mRootRef.child("Messages").child(mCurrentUser.getUid()).child(mPartnerID);
问:如何将"seen": false
设置为"seen": true
的所有条目设置为
谢谢你的帮忙!
发布于 2018-08-13 14:03:56
要解决此问题,请使用以下代码行:
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);
发布于 2018-08-13 16:14:07
另一种更新方法是使用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
https://stackoverflow.com/questions/51823781
复制相似问题