HarmonyOS 鸿蒙Next 调用的CustomDialogController.open()崩溃

发布于 1周前 作者 nodeper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 调用的CustomDialogController.open()崩溃

在组件里面调用打开自定义弹框正常,在类里面调用开启自定义弹框CustomDialogController.open()报错崩溃

Reason:Signal:SIGSEGV(SEGV_MAPERR)@0x00000000000002a0

Thread name:

#00 pc 00000000011fb0c8 /system/lib64/libace.z.so (a5c7b5d9e1ae7f7a31e2e2e05a6e033c)

#01 pc 00000000011fd3a0 /system/lib64/libace.z.so (a5c7b5d9e1ae7f7a31e2e2e05a6e033c)

#02 pc 0000000000379fa0 /system/lib64/libark_jsruntime.so (a9838329338e3acbe12d031cfc14bd4c)

#03 pc 0000007c74298bd8 [anon:ArkJS Heap]

6 回复

开启弹框的方法如下:

  public showAlertDialog(cancel:boolean,  singleButton:boolean,  title:string,  alertmessage:string,  confirm_text:string,  cancel_text:string, onCancel:()=>void, onSure:()=> void):void{
    // this.updateDialogController.close()
    this.dialogViewmodel = new DyALertDialogViewmodel()
    this.dialogViewmodel.autoCancel = cancel
    this.dialogViewmodel.showCancel = !singleButton
    this.dialogViewmodel.title = title
    this.dialogViewmodel.content = alertmessage
    this.dialogViewmodel.cancelStr = cancel_text
    this.dialogViewmodel.sureStr = confirm_text
    this.dialogViewmodel.onConfirm = onSure
    this.dialogViewmodel.onCancel = onCancel
    try {
      let updateDialogController = new CustomDialogController({
        builder:DyALertDialog({
          viewModel: this.dialogViewmodel
        }),
        alignment:DialogAlignment.Center,
        autoCancel:this.dialogViewmodel.autoCancel,
        customStyle:true
  })

  updateDialogController.open()
} <span class="hljs-keyword">catch</span> (e) {
  LogUtil.logE(<span class="hljs-keyword">this</span>.TAG, <span class="hljs-string">'-----------------showCommonNetErrorDialog ----sure----'</span> + e)

}

}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

提单了,回复:

CustomDialogController仅在作为[@CustomDialog](/user/CustomDialog)和[@Component](/user/Component) struct的成员变量,且在[@Component](/user/Component) struct内部定义时赋值才有效,具体用法可看下方示例。

有没有一种方式 定义个一个app 全局的弹框,只需要实例化一次,后续传参展示内容,这种,每次使用的时候在@Component struct 内部去实例化 感觉动作重复了,不太方便使用

类似于 AlertDialog.show 的使用, 可以封装一个函数使用, export function NMADialog(dialog: NMADialogModel) { AlertDialog.show({ title: dialog.title, message: dialog.message, alignment: DialogAlignment.Center, buttonDirection: DialogButtonDirection.HORIZONTAL, gridCount: 5, buttons: NMADialogType.getDialog(dialog) }) }

有啊,有以下几种实现:
1.通过compent中初始化contorl
2.通关node进行提前埋点,然后结合navgator在根部埋点
3.自定义窗口

有的,基于 promptAction和ComponentContent,我封装了一个工具类 参考:https://developer.huawei.com/consumer/cn/forum/topic/0202156174901893142?fid=0109140870620153026

针对您提到的HarmonyOS鸿蒙Next系统中调用CustomDialogController.open()导致的崩溃问题,这通常可能由以下几个原因引起:

  1. 资源未正确加载:确保对话框所需的布局文件、图片资源等已正确配置在项目中,并且路径无误。

  2. 上下文不匹配CustomDialogController.open()调用时传入的上下文(Context)需为有效的Activity或Application上下文,检查是否传入了错误的上下文类型(如Fragment的上下文)。

  3. 线程问题:UI操作需在主线程进行,确认CustomDialogController.open()的调用是在主线程中执行。

  4. 内存泄漏或对象未初始化:检查是否存在内存泄漏情况,或者CustomDialogController实例在调用open()前未正确初始化。

  5. 系统或SDK版本不兼容:确认您的鸿蒙OS版本与使用的SDK版本兼容,有时新版本系统会对旧API进行更改或废弃。

解决上述问题后,通常可以解决崩溃问题。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部