鸿蒙开发融云demo发送消息失败,重新发送

92 阅读1分钟
鸿蒙开发融云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的可以看简介联系我,也可以私信我,我每天都看私信的