【问题标题】:How to change the value of child of an unknown parent in Firebase - Android如何在 Firebase 中更改未知父级的子级值 - Android
【发布时间】:2019-03-25 19:24:34
【问题描述】:

我正在开发一个 Firebase 聊天应用。我一直在尝试更改 Firebase 中未知父级的子级值,但我无法正确处理。

这是我的 Firebase 数据库结构:

Firebase database

当用户打开 Messages 活动时,我想将“seen”的值从 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】:

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

    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 的教程。

    【讨论】:

    • 使用上面相同的代码如何计算上面查询返回的项目数。 dataSnapshot.getChildrenCount() 没有返回任何内容
    • 没有看到代码,我帮不上什么忙。这个问题与最初的问题无关。因此,请发布另一个新问题,以便我和其他 Firebase 开发人员可以为您提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多