как добавить дочерний вид точно под его родительский firebase android - PullRequest
0 голосов
/ 02 октября 2018

Вот так выглядит моя структура базы данных: database

Я создаю приложение чата с использованием Firebase в Android.

Этот код нижедля сообщения чата

 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 у меня также есть идентификатор сообщения для конкретного сообщения, для которого выполняется ответ.

Так как я могу это сделать?тот ?

1 Ответ

0 голосов
/ 02 октября 2018

Я думаю, вам следует разделить запросы на два разных запроса: первый, который обрабатывает основной поток сообщений;и другой для обработки ответов на каждое основное сообщение.

READ:

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) {

                    }
                });
            }
        }

        ......
    });

WRITE:

    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");

Код должен следовать этой структуре.Обратите внимание, что это не полный код, и я поставил имена, которые вы должны адаптировать к коду и классам, которые вы используете.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...