聊天界面获取聊天记录,调用的是哪个方法获取?是getUserMessages这个方法的话fromIndex要怎么传呢?为什么我获取不到我自己发出去的消息,已贴出发送和获取消息方法

newsoul 23天前 385

send_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String msg = message_tv.getText().toString().trim(); if (msg.isEmpty()) { MyToast.makeText(ImActivity.this, "请输入需要发送的内容", MyToast.LENGTH_SHORT).show(); return; } Conversation conversation = new Conversation(); conversation.type = Conversation.ConversationType.Single; conversation.line = 0; conversation.target = userId; TextMessageContent content = new TextMessageContent(); content.setContent(msg); Message message = new Message(); message.content = content; message.direction = MessageDirection.Send; message.status = MessageStatus.Sent; message.conversation = conversation; Im.chatManager.sendMessage(message, new SendMessageCallback() { @Override public void onSuccess(long messageUid, long timestamp) { runOnUiThread(() -> { message.messageUid = messageUid; message.serverTime = timestamp; messageList.add(message); imMessageAdapter.notifyItemInserted(messageList.size() - 1); scrollBottom(); message_tv.setText(""); }); }

                @Override
                public void onFail(int errorCode) {

                }

                @Override
                public void onPrepare(long messageId, long savedTime) {

                }
            });
        }
    });

public void getMessage() { Conversation conversation = new Conversation(); conversation.target = userId; conversation.line = 0; conversation.type = Conversation.ConversationType.Single; Im.chatManager.getUserMessages(userId, conversation, 0, true, 20, new GetMessageCallback() { @Override public void onSuccess(List messages, boolean hasMore) { runOnUiThread(() -> { messageList.clear(); for (Message message : messages) { MessageContent messageContent = message.content; String showText = ""; if (messageContent instanceof TextMessageContent textMsg) { showText = textMsg.getContent(); } else if (messageContent instanceof TipNotificationContent tipNotificationContent) { showText = tipNotificationContent.tip; } if (!showText.isEmpty()) { messageList.add(message); } } imMessageAdapter.notifyDataSetChanged(); scrollBottom(); }); }

        @Override
        public void onFail(int errorCode) {

        }
    });
}
最新回复 (2)
  • HeavyRain 23天前
    引用 2
    getUserMessages 这个方法是获取某个用户的聊天记录,不要用这个方法,要用getMessages,有个before参数确定是获取更早的消息,还是获取更新的消息,fromIndex只起点,用于分段获取,如果第一次获取可以用0,然后下一次用上一次的终点的消息id(不是messageUid)
  • wfclaw 1天前
    引用 3
    你好,关于获取聊天记录的问题,我帮你分析一下:

    **1. getUserMessages 参数说明**

    getUserMessages 方法签名:
    `getUserMessages(String userId, Conversation conversation, long fromIndex, boolean before, int count, GetMessageCallback callback)`

    参数说明:
    - `userId`: 对方用户ID
    - `conversation`: 会话信息
    - `fromIndex`: 起始消息ID,**传0表示从最新消息开始获取**
    - `before`: true表示获取比fromIndex旧的消息,false表示获取比fromIndex新的消息
    - `count`: 获取消息数量
    - `callback`: 回调

    **2. 获取不到自己发送的消息可能原因**

    看你代码中发送消息后有这行:
    `messageList.add(message);`

    但获取消息时你做了过滤:
    ```
    if (messageContent instanceof TextMessageContent textMsg) {
        showText = textMsg.getContent();
    } else if (messageContent instanceof TipNotificationContent tipNotificationContent) {
        showText = tipNotificationContent.tip;
    }
    ```

    问题可能在这里:
    - 确保 `messageList` 是同一个实例
    - 发送消息后添加到 messageList,但获取消息时 `messageList.clear()` 会清空之前添加的
    - 如果发送成功但获取时过滤条件导致被排除,就不会显示

    **3. 建议检查**

    1. 发送消息后,消息是否成功到达服务器(看 onSuccess 回调是否执行)
    2. 获取消息时,不要过滤,先打印所有消息的 content 类型,看是否有你发送的消息
    3. 检查 conversation.target 是否与发送时一致

    **4. 简化测试代码**

    可以先去掉过滤条件,直接显示所有消息:
    ```
    for (Message message : messages) {
        Log.d("Message", "content type: " + message.content.getClass().getSimpleName());
        messageList.add(message);
    }
    ```

    看看是否能获取到自己发送的消息。

    另外建议用官方Demo对比测试,确认是代码问题还是SDK使用问题。
返回