首页 > 解决方案 > 如何在 Firebase 中更改未知父级的子级值 - Android

问题描述

我正在开发一个 Firebase 聊天应用程序。我一直在尝试更改 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");
                        }


                    }
                });

我怎样才能最好地达到我想要的结果?

标签: javaandroidfirebasefirebase-realtime-database

解决方案


要解决此问题,您需要使用查询。所以请使用以下代码行:

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财产从更改falsetrue

如果您在某个时候还考虑尝试使用Cloud Firestore,您可以在此处找到有关如何使用 Kotlin 创建完整且功能强大的 Firestore 聊天应用程序的教程。


推荐阅读