当前位置: 首页 > 知识库问答 >
问题:

您发送给其他用户的消息不会显示在他们的chatsfragment中。只显示给邮件的发件人,而不显示给接收者

赫连鸿振
2023-03-14

对于下面的方法有逻辑上的问题,也许有人可以帮我解决。当一个用户向另一个用户发送消息时,该消息显示在chatsfragment中,就像发送该消息的用户应该看到的那样,但另一个用户没有得到它/看到它。只有当您是发送第一条消息的人时,这些消息才会出现。

我希望这样做,使其他用户收到消息,即使他们没有回应它。ChatsFragment中的else if语句不应该说明我要做什么吗?如果当前登录的用户是ID(receiver),那么他们也应该让消息出现在chatsfragment中,即使他们还没有响应它?还是我漏掉了什么?

JSON结构如下所示:

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个答案

山疏珂
2023-03-14

约翰,这是我的火警数据库。和我建议你的答案差不多。你可以检查。可能对你更有用。

 类似资料:
  • 问题内容: 我正在尝试通过Java Mail应用程序将邮件发送给我的朋友。我能够成功完成此操作,但是邮箱中的收件人列显示了完整的电子邮件地址,而不是发送者的姓名。我尝试更改各种参数,但是邮箱仍然会显示完整的电子邮件地址,而不是发件人的姓名。 使用此方法发送消息: 我将此方法称为: 问题答案: 您可以在使用中设置名称

  • 我从我的域帐户发送消息,但他们不显示在用户(从nodemailer的选项)发送box.But当从gmail服务发送消息时,消息显示在已发送的user.Am我在下面的代码中缺少一些东西?

  • 发送附件时,我看不到正文消息(message.setText(this.getEmailBody());)在电子邮件中。如果没有附件,电子邮件将显示正文消息。电子邮件被发送到gmail账户。你知道为什么会这样吗?

  • 我已经在Gmail中的Check mail from other accounts(使用POP3)和Send mail as(使用TLS在587端口通过mail.mydomain.com安全连接发送邮件)下设置了我的cpanel电子邮件地址 看着Roundcube,我可以看到里面有收到的邮件,但没有发送的邮件——尽管Gmail是通过我的域服务器发送的。 有没有办法查看通过Gmail收发的邮件?

  • 遇到WP插件问题,请联系表格7。当我填写表格并提交时,我收到一条成功消息,说明它已发送,但我没有在电子邮件中收到它。 邮件不在我的垃圾邮件中,我只在输入邮件时才收到邮件,邮件被发送到!? 它要发送的电子邮件是一个交换帐户。我可以通过WP后端上的联系人表单提交来查看电子邮件。但是我想解决这个问题。 类型 邮件 致:myname@company.com 发件人:网站 主题:挑战 我还检查了网站主机,他

  • 所以,我正在制作一个笔记应用程序,并为CRUD操作实现了fiRecovery,我如何保存用户的数据,使其不会显示给应用程序的其他用户?