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%')
  }
}

上面两块代码在执行过程中,都遇到同一个问题:

cke_44381.png

有哪位大佬可以帮忙看看嘛?


更多关于HarmonyOS鸿蒙Next ETS项目中,CommonEvent发布和订阅公共事件报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

你为什么要判断 err.code 呢?判断 err 是否存在就好了,如果是错误回调,也不用判断 err.code 直接将 err 序列化后输出就行了

更多关于HarmonyOS鸿蒙Next ETS项目中,CommonEvent发布和订阅公共事件报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


额,我是摘抄的官网的代码,现在问题不是判断不判断,而是if和else都没有走……,

而且订阅者也没搜到任何消息,

在HarmonyOS鸿蒙Next ETS项目中,CommonEvent发布和订阅公共事件报错可能涉及以下原因:

  1. 权限问题:确保在config.json中正确配置了ohos.permission.COMMON_EVENT权限。未正确配置权限会导致事件发布或订阅失败。

  2. 事件名称错误:发布和订阅的事件名称必须完全一致,包括大小写。事件名称不匹配会导致订阅失败。

  3. 事件类型不匹配:发布的事件类型与订阅的事件类型必须一致。例如,发布的是系统事件,订阅的也必须是系统事件。

  4. 生命周期问题:确保在组件的生命周期内进行事件的发布和订阅。在组件销毁后继续操作事件会导致报错。

  5. 事件参数错误:发布事件时传递的参数必须符合订阅事件的预期格式。参数格式不匹配会导致订阅失败。

  6. 系统限制:某些系统事件可能受到限制,无法在应用层进行发布或订阅。检查事件是否属于受限事件。

  7. 版本兼容性:确保使用的HarmonyOS SDK版本与项目兼容。版本不兼容可能导致事件机制无法正常工作。

  8. 日志分析:查看设备日志,获取具体的错误信息。日志中通常会提供详细的错误原因和堆栈信息。

  9. 事件优先级:某些事件可能设置了优先级,低优先级的订阅可能无法接收到高优先级的事件。

  10. 事件过滤条件:检查订阅时设置的事件过滤条件是否正确。过滤条件不匹配会导致无法接收到事件。

通过检查以上问题,可以定位并解决CommonEvent发布和订阅公共事件报错的原因。

在HarmonyOS鸿蒙Next ETS项目中,CommonEvent发布和订阅公共事件报错可能由以下原因导致:

  1. 权限问题:确保在config.json中正确配置了ohos.permission.COMMONEVENT_STICKY等必要权限。
  2. 事件名称错误:检查发布和订阅的事件名称是否一致,区分大小写。
  3. 生命周期管理:确保订阅者在发布事件时已注册,避免在组件销毁后仍尝试发布或订阅事件。
  4. 系统版本兼容性:确认使用的API与当前系统版本兼容。

建议检查日志以获取更详细的错误信息,并根据具体情况进行调试。

回到顶部