如何在Firebase-Android

时间:2019-03-25 11:17:43

标签: java android firebase firebase-realtime-database

我正在使用Firebase聊天应用程序。我一直在尝试为Firebase中的未知父级更改子级值,但我做对了。

这是我的Firebase数据库结构:

Firebase database

当用户打开“消息”活动时,我想将“已见”的值从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");
                        }


                    }
                });

我如何才能最好地达到预期效果?

1 个答案:

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