如何在其父firebase android下面添加确切的子视图

时间:2018-10-02 11:56:43

标签: android firebase firebase-realtime-database

这是我的数据库结构的样子: database

我正在使用Android中的Firebase创建聊天应用。

下面的代码用于聊天消息

 SnapshotParser<GroupMessage> parser = new 
   SnapshotParser<GroupMessage>() {
        @NonNull
        @Override
        public GroupMessage parseSnapshot(final 
    DataSnapshot dataSnapshot) {

            final GroupMessage groupMessage = 
          dataSnapshot.getValue(GroupMessage.class);

            if (groupMessage != null) {


                groupMessage.setId(dataSnapshot.getKey());

            }

            return groupMessage;
        }
    };

这里,消息和回复数据都在不同的模型类(GroupMessage和MessageReplyModel)中,现在我想像Facebook一样显示消息和回复。

  mFirebaseDatabaseReference.child
   (Constants.MESSAGE_REPLIES).getRef()
   .addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            for(DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()){

                MessageReplyModel replyModel = dataSnapshot1.getValue(MessageReplyModel.class);

                replyModel.setId(dataSnapshot.getKey());

            }

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

如何在邮件下方显示特定邮件的答复。

在我的Firebase结构中,我还具有要执行回复的特定消息的消息ID。

那我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

我认为您应该将请求分为两个不同的查询:第一个处理消息主线程;和另一封邮件来处理对每条主要邮件的答复。

阅读:

databaseReference.child("MAIN_THREAD").addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            // HANDLE DATA AND CHECK IF HAS REPLIES

            if (dataSnapshot.getValue().getReplies() != null && dataSnapshot.getValue().getReplies().size() != 0){
                FirebaseDatabase.getInstance().getReference().child("REPLIES_THREAD").orderByChild("PARENT_MESSAGE").equalTo("PARENT_UID")
                        .addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        //HANDLE REPLIES
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });
            }
        }

        ......
    });

写:

    databaseReference.child("MAIN_THREAD").push().setValue(new Message());

    databaseReference.child("REPLIES_THREAD").push().setValue(new Message());
    databaseReference.child("MAIN_THREAD").child("PARENT_MESSAGE").child("replies").push().setValue("MESSAGE_UID");

代码应遵循此结构。请注意,这不是完整的代码,我输入了您必须适应所使用的代码和类的名称。

希望有帮助。