如何在Firebase - Android中更改未知父级的子级值

问题描述 投票:0回答:1

我正在使用Firebase聊天应用。我一直试图在Firebase中更改未知父级的子值,但我无法正确使用它。

这是我的Firebase数据库结构:

Firebase database

我想在用户打开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");
                        }


                    }
                });

我如何才能达到理想的效果?

java android firebase firebase-realtime-database
1个回答
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的教程。

© www.soinside.com 2019 - 2024. All rights reserved.