Сообщение, которое вы отправляете другому пользователю, не отображается в его ChatsFragment. Отображается только для отправителя сообщения, а не для получателя - PullRequest
0 голосов
/ 07 мая 2020

Возникли проблемы с логами c для следующего метода, возможно, кто-нибудь может мне помочь. Когда пользователь отправляет другому пользователю сообщение, сообщение появляется в ChatsFragment, как и положено пользователю, отправившему сообщение, но другой пользователь его не получает / не видит. Сообщения появляются только в том случае, если вы отправили первое сообщение.

Я бы хотел сделать так, чтобы другой пользователь получал сообщение, даже если он не отвечает на него. Разве оператор else if в ChatsFragment не должен учитывать то, что я собираюсь делать? Если пользователь, который в настоящее время вошел в систему, является id (получателем), тогда он также должен отображать сообщение в их ChatsFragment, даже если они еще не ответили на него? Или мне что-то не хватает?

Структура JSON выглядит так:

enter image description here

Для отправки сообщения я использую этот метод в MessageActivity:

MessageActivity

private void sendMessage(String sender, final String receiver, String message) {
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Chats");

        Date date = Calendar.getInstance().getTime();
        String formattedDate = DateFormat.getDateInstance(DateFormat.FULL).format(date);

        String time = null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            time = LocalTime.now().format(DateTimeFormatter.ofPattern("HH:mm"));
        }

        String messageId = reference.push().getKey();

        HashMap<String, Object> hashMap = new HashMap<>();
        hashMap.put("sender", sender);
        hashMap.put("receiver", receiver);
        hashMap.put("message", message);
        hashMap.put("isseen", false);
        hashMap.put("date", formattedDate);
        hashMap.put("time", time);
        hashMap.put("timestamp", ServerValue.TIMESTAMP);
        hashMap.put("messageId", messageId);

        if (messageId != null)
            reference.child(messageId).setValue(hashMap);

        final DatabaseReference chatref = FirebaseDatabase.getInstance().getReference("Chatlist").child(mFirebaseUser.getUid()).child(mId);
        chatref.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (!dataSnapshot.exists()) {
                    chatref.child("id").setValue(mId);
                    chatref.child("sender").setValue(mFirebaseUser.getUid());
                }
            }

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

            }
        });

И чтобы добавить сообщение в ChatFragment, я использую следующий метод, который работает для добавления чата, если вы являются теми, кто инициирует разговор, но, как я сказал ранее, другой пользователь его не получает:

ChatsFragment

private void chatList() {
    mUsers = new ArrayList<>();
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users");
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                mUsers.clear();
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    User user = snapshot.getValue(User.class);
                    for (Chatlist chatlist : mUsersList) {
                        if (mFirebaseUser != null && user != null) {
                            if (!user.getId().equals(mFirebaseUser.getUid()) && user.getId().equals(chatlist.id)) {
                                mUsers.add(user);
                            } else if (mFirebaseUser.getUid().equals(chatlist.id)) {
                                mUsers.add(user);
                            }
                        }
                    }
                }

                mUserAdapterChat = new UserAdapterChat(getContext(), mUsers, true);
                mUserAdapterChat.notifyDataSetChanged();
                mRecyclerView.setAdapter(mUserAdapterChat);
            }

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

            }
        });
    }

1 Ответ

1 голос
/ 09 мая 2020

Джон, это моя база данных Firebase. Это похоже на ответ, который я вам предложил. Вы можете изучить. Это может быть более полезно для вас.

enter image description here

...