我正在使用Firebase聊天应用程序。我一直在尝试为Firebase中的未知父级更改子级值,但我做对了。
这是我的Firebase数据库结构:
当用户打开“消息”活动时,我想将“已见”的值从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");
}
}
});
我如何才能最好地达到预期效果?
答案 0 :(得分:0)
要解决此问题,您需要使用查询。因此,请使用以下代码行:
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的教程。