HarmonyOS 鸿蒙Next 调用的CustomDialogController.open()崩溃
HarmonyOS 鸿蒙Next 调用的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]
开启弹框的方法如下:
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) }) }
有的,基于 promptAction和ComponentContent,我封装了一个工具类 参考:https://developer.huawei.com/consumer/cn/forum/topic/0202156174901893142?fid=0109140870620153026
针对您提到的HarmonyOS鸿蒙Next系统中调用CustomDialogController.open()
导致的崩溃问题,这通常可能由以下几个原因引起:
-
资源未正确加载:确保对话框所需的布局文件、图片资源等已正确配置在项目中,并且路径无误。
-
上下文不匹配:
CustomDialogController.open()
调用时传入的上下文(Context)需为有效的Activity或Application上下文,检查是否传入了错误的上下文类型(如Fragment的上下文)。 -
线程问题:UI操作需在主线程进行,确认
CustomDialogController.open()
的调用是在主线程中执行。 -
内存泄漏或对象未初始化:检查是否存在内存泄漏情况,或者
CustomDialogController
实例在调用open()
前未正确初始化。 -
系统或SDK版本不兼容:确认您的鸿蒙OS版本与使用的SDK版本兼容,有时新版本系统会对旧API进行更改或废弃。
解决上述问题后,通常可以解决崩溃问题。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。