我正在使用Firebase聊天应用。我一直试图在Firebase中更改未知父级的子值,但我无法正确使用它。
这是我的Firebase数据库结构:
我想在用户打开Messages活动时将“see”的值从false
更改为true
。
每条消息都有一个推送ID,我不知道该值。我希望能够编辑推送ID的子项。
这是我的代码:
DatabaseReference messageRef = mRootRef.child("messages").child(mCurrentUserId).child(mChatUser);
messageRef.child("seen").setValue(true).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d("isseen", "Seen set to true");
} else {
Log.d("isseen", "Seen not set to true");
}
}
});
我如何才能达到理想的效果?
要解决此问题,您需要使用查询。所以请使用以下代码行:
DatabaseReference messageRef = mRootRef.child("messages").child(mCurrentUserId).child(mChatUser);
Query query = messageRef.orderByChild("seen").equalTo(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) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
query.addListenerForSingleValueEvent(valueEventListener);
结果将你的seen
财产从false
改为true
。
如果您在某些时候也考虑尝试使用Cloud Firestore,那么您可以在这里找到有关如何创建完整且功能齐全的Firestore Chat App using Kotlin的教程。