HarmonyOS鸿蒙Next ETS项目中,CommonEvent发布和订阅公共事件报错
HarmonyOS鸿蒙Next ETS项目中,CommonEvent发布和订阅公共事件报错
import commonEvent from '@ohos.commonEvent';
var subscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作
//订阅者信息
var subscribeInfo = {
events: ["event"]
};
@Entry
@Component
struct SubscribePage {
build() {
Row() {
Column() {
Text('点击订阅')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
if(subscriber==null){
//创建订阅者 callback形式
commonEvent.createSubscriber(subscribeInfo, createSubscriberCallBack);
//创建订阅者 promise形式
//commonEvent.createSubscriber(subscribeInfo).then((commonEventSubscriber) =>{
// console.info("createSubscriber");
// subscriber = commonEventSubscriber;
//}).catch((err) =>{
// console.error("createSubscriber failed " + JSON.stringify(err));
//});
}
})
}
.width('100%')
}
.height('100%')
}
}
//订阅公共事件回调
function subscribeCallBack(err, data) {
if (err.code) {
console.error("subscribe failed " + JSON.stringify(err));
} else {
console.info("subscribe " + JSON.stringify(data));
}
}
//创建订阅者回调
function createSubscriberCallBack(err, commonEventSubscriber) {
if (err.code) {
console.error("createSubscriber failed " + JSON.stringify(err));
} else {
console.info("createSubscriber");
subscriber = commonEventSubscriber;
//订阅公共事件
commonEvent.subscribe(subscriber, subscribeCallBack);
}
}
import commonEvent from '@ohos.commonEvent';
@Entry
@Componentstruct
PublishPage {
build() {
Row() {
Column() {
Text('发布公共事件')
.fontSize(25)
.fontWeight(FontWeight.Bold)
.onClick(() => {
//公共事件相关信息
var options = {
code: 0, //公共事件的初始代码
data: "initial data", //公共事件的初始数据
isOrdered: true //有序公共事件
}
//发布公共事件回调
function publishCallBack(err) {
if (err.code) {
console.error("publish failed " + JSON.stringify(err));
} else {
console.info("publish");
}
}
//发布公共事件
commonEvent.publish("event", options, publishCallBack);
})
}
.width('100%')
}
.height('100%')
}
}
上面两块代码在执行过程中,都遇到同一个问题:
有哪位大佬可以帮忙看看嘛?
更多关于HarmonyOS鸿蒙Next ETS项目中,CommonEvent发布和订阅公共事件报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你为什么要判断 err.code
呢?判断 err
是否存在就好了,如果是错误回调,也不用判断 err.code
直接将 err
序列化后输出就行了
更多关于HarmonyOS鸿蒙Next ETS项目中,CommonEvent发布和订阅公共事件报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
额,我是摘抄的官网的代码,现在问题不是判断不判断,而是if和else都没有走……,
而且订阅者也没搜到任何消息,
在HarmonyOS鸿蒙Next ETS项目中,CommonEvent发布和订阅公共事件报错可能涉及以下原因:
-
权限问题:确保在
config.json
中正确配置了ohos.permission.COMMON_EVENT
权限。未正确配置权限会导致事件发布或订阅失败。 -
事件名称错误:发布和订阅的事件名称必须完全一致,包括大小写。事件名称不匹配会导致订阅失败。
-
事件类型不匹配:发布的事件类型与订阅的事件类型必须一致。例如,发布的是系统事件,订阅的也必须是系统事件。
-
生命周期问题:确保在组件的生命周期内进行事件的发布和订阅。在组件销毁后继续操作事件会导致报错。
-
事件参数错误:发布事件时传递的参数必须符合订阅事件的预期格式。参数格式不匹配会导致订阅失败。
-
系统限制:某些系统事件可能受到限制,无法在应用层进行发布或订阅。检查事件是否属于受限事件。
-
版本兼容性:确保使用的HarmonyOS SDK版本与项目兼容。版本不兼容可能导致事件机制无法正常工作。
-
日志分析:查看设备日志,获取具体的错误信息。日志中通常会提供详细的错误原因和堆栈信息。
-
事件优先级:某些事件可能设置了优先级,低优先级的订阅可能无法接收到高优先级的事件。
-
事件过滤条件:检查订阅时设置的事件过滤条件是否正确。过滤条件不匹配会导致无法接收到事件。
通过检查以上问题,可以定位并解决CommonEvent发布和订阅公共事件报错的原因。
在HarmonyOS鸿蒙Next ETS项目中,CommonEvent发布和订阅公共事件报错可能由以下原因导致:
- 权限问题:确保在
config.json
中正确配置了ohos.permission.COMMONEVENT_STICKY
等必要权限。 - 事件名称错误:检查发布和订阅的事件名称是否一致,区分大小写。
- 生命周期管理:确保订阅者在发布事件时已注册,避免在组件销毁后仍尝试发布或订阅事件。
- 系统版本兼容性:确认使用的API与当前系统版本兼容。
建议检查日志以获取更详细的错误信息,并根据具体情况进行调试。