插入消息
您可以通过 IMCenter
的 insertOutgoingMessage
或 insertIncomingMessage
方法向本地会话中插入发送或接收方向的消息。
重要说明
- 插入的消息仅存储在本地数据库中,不会发送到服务器或对方设备。
- 卸载重装应用或切换设备登录时,插入的消息不会从服务器同步到本地。
- 插入消息后会自动更新 UI 界面。
使用要求
- 插入的消息必须为客户端支持存储的消息类型,参考消息介绍文档的了解消息注解部分。
- 消息内容需要符合对应消息类型的数据结构要求。
插入发送消息
接口
Java
IMCenter.getInstance().insertOutgoingMessage(conversationType, targetId, sentStatus, content, sentTime,callback);
参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
conversationType | ConversationType | 是 | 会话类型 |
targetId | String | 是 | 会话 ID,详见消息介绍中关于 Target ID 的说明 |
sentStatus | Message.SentStatus | 是 | 发送状态 |
content | MessageContent | 是 | 消息内容 |
sentTime | long | 是 | 消息的发送时间,消息列表会按此时间排序并展示 |
callback | IRongCallback.ResultCallback<Message> | 是 | 回调接口 |
示例代码
Java
ConversationType conversationType = ConversationType.PRIVATE;
String targetId = "user1";
SentStatus sentStatus = SentStatus.SENT;
TextMessage content = TextMessage.obtain("这里是消息内容");
long sentTime = System.currentTimeMillis();
IMCenter.getInstance().insertOutgoingMessage(conversationType, targetId, sentStatus, content, sentTime, new RongIMClient.ResultCallback<Message>() {
/**
* 成功回调
* @param message 插入的消息
*/
@Override
public void onSuccess(Message message) {
// 处理插入成功的逻辑
}
/**
* 失败回调
* @param errorCode 错误码
*/
@Override
public void onError(RongIMClient.ErrorCode errorCode) {
// 处理插入失败的逻辑
}
});
插入接收消息
接口
Java
IMCenter.getInstance().insertIncomingMessage(conversationType, targetId, senderUserId, receivedStatus, content, sentTime, callback);
参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
conversationType | ConversationType | 是 | 会话类型 |
targetId | String | 是 | 目标/会话 ID,用于标识会话。注意:单聊会话中插入接收消息 时,Target ID 始终是单聊对端用户 ID;群聊、超级群的会话 ID 分别为群组 ID、超级群 ID。详见消息介绍中关于 Target ID 的说明。 |
senderUserId | String | 是 | 发送方用户 ID |
receivedStatus | Message.ReceivedStatus | 是 | 接收状态 |
content | MessageContent | 是 | 消息内容 |
sentTime | long | 是 | 消息的发送时间,消息列表会按此时间排序并展示 |
callback | IRongCallback.ResultCallback<Message> | 是 | 回调接口 |
示例代码
Java
ConversationType conversationType = ConversationType.PRIVATE;
String targetId = "user1";
String senderUserId = "sender_user_id"; // 发送方用户 ID
ReceivedStatus receivedStatus = new ReceivedStatus(0x1);
TextMessage content = TextMessage.obtain("这是一条插入的接收消息");
long sentTime = System.currentTimeMillis();
IMCenter.getInstance().insertIncomingMessage(conversationType, targetId, senderUserId, receivedStatus, content, sentTime, new RongIMClient.ResultCallback<Message>() {
/**
* 成功回调
* @param message 插入的消息
*/
@Override
public void onSuccess(Message message) {
// 处理插入成功的逻辑
}
/**
* 失败回调
* @param errorCode 错误码
*/
@Override
public void onError(RongIMClient.ErrorCode errorCode) {
// 处理插入失败的逻辑
}
});
直接显示消息对象
如果您已有完整的消息对象,需要直接添加到当前会话并立即显示,可以使用 appendAndDisplayMessage
方法。
insertOutgoingMessage
和 insertIncomingMessage
方法已包含插入消息到数据库并显示到会话的功能,通常无需额外调用此方法。
提示
- 此接口从 5.28.0 版本开始支持。
sentTime
设置错误会影响消息排序,请谨慎使用。- 自行构建的 Message 对象需要保证
messageId > 0
(默认为 0) sentStatus
字段建议使用SentStatus.SENT
。
接口
Java
IMCenter.getInstance().appendAndDisplayMessage(message);
参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
message | Message | 是 | 要添加并显示的消息对象,不可为 null,需要保证 messageId > 0 |
示例代码
Java
// 假设您已有一个构建好的消息对象
Message existingMessage = ...; // 确保 messageId > 0
IMCenter.getInstance().appendAndDisplayMessage(existingMessage);