鸿蒙开发融云demo发送消息失败,重新发送
融云鸿蒙版是不带UI的,得自己一步步搭建。 这次讲如何处理发送消息失败,然后重现发送。 有点难度,好好看,好好学
一、思路:
根据msg.sentStatus状态实现失败的叹号。然后点击叹号进行发送。重新发送时记得先删除再发送
二、效果图:
发送失败:
重新发送:
三、关键代码:
if (this.msg.sentStatus === SentStatus.Failed || this.msg.sentStatus === SentStatus.Sending) {
Image(this.msg.sentStatus === SentStatus.Failed?$r('app.media.rc_ic_error_notice'):$r('app.media.rc_send_loading_msg'))
.width(18)
.height(18)
.margin({ right: $r('app.integer.layout_8') })
.alignSelf(ItemAlign.Center)
.onClick(()=>{
ImUtils.sendAgainMessage(
this.msg,
()=>{ this.delCallback?.(this.index) }
)
})
}
public static sendAgainMessage(msgSrc: Message, delSuccessCallback: () => void) {
// 先删除旧的本地消息。没发生成功的,远端服务器是没有记录的,只删本地即可
let idList = new List<number>();
idList.add(msgSrc.messageId);
IMEngine.getInstance().deleteHistoryMessagesByIds(idList).then(result => {
if (EngineError.Success !== result.code) {
// 删除消息失败
return;
}
delSuccessCallback()
// 重新发送
if (msgSrc.objectName === TextMessageObjectName) {
ImUtils.sendTextMessage(msgSrc.targetId, (msgSrc.content as TextMessage).content, (msgSrc.content as TextMessage).extra)
} else if (msgSrc.objectName === ImageMessageObjectName) {
ImUtils.sendImageMessage(msgSrc.targetId, (msgSrc.content as ImageMessage).localPath)
} else if (msgSrc.objectName === HQVoiceMessageObjectName){
ImUtils.sendVoiceMessage(msgSrc.targetId,(msgSrc.content as HQVoiceMessage).localPath,(msgSrc.content as HQVoiceMessage).duration)
}
}
})
}
鸿蒙融云整个项目源码结构图:
有问题或者需要完整源码demo的可以看简介联系我,也可以私信我,我每天都看私信的