HarmonyOS 鸿蒙Next EmitterData我在接收端如何解析?

发布于 1周前 作者 zlyuanteng 最后一次编辑是 5天前 来自 鸿蒙OS

我发送的emitter代码如下:

let eventData: emitter.EventData = {
  data: {
    isHot: false,
    NewsID: this.videoPlayerModel.videoData.NewsID
  }
};
emitter.emit(EventKeys.EVENT_CHANGE_HOT, eventData)

我在接收端如何解析这个eventData呢? 接收端代码:

let callback = (eventData: emitter.EventData): void => {
  eventData.data
  LogUtils.info('event callback:' + JSON.stringify(eventData));
};
emitter.on(EventKeys.EVENT_CHANGE_HOT,callback)

打印出来是:event callback:{“data”:{“isHot”:false,“NewsID”:102097848}} 请问下最简单的解析方法是什么?


更多关于HarmonyOS 鸿蒙Next EmitterData我在接收端如何解析?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
你可参考emitter的开发步骤

@ohos.events.emitter (Emitter)-进程线程通信-ArkTS API-Basic Services Kit(基础服务)-基础功能-系统 - 华为HarmonyOS开发者

和如下demo获取到eventdata中的数据

import emitter from '@ohos.events.emitter'

function registerEvent() { // 定义一个eventId为1的事件 let event: emitter.InnerEvent = { eventId: 1 }; // 收到eventId为1的事件后执行该回调 let callback = (eventData: emitter.EventData) => { let content: emitter.EventData = eventData[“content”] let id: emitter.EventData = eventData[“id”] let isEmpty: emitter.EventData = eventData[“isEmpty”] console.info(‘event callback content=’ + content); }; // 订阅eventId为1的事件 emitter.on(event, callback); }

function sendEvent() { // 定义一个eventId为1的事件,事件优先级为Low let event: emitter.InnerEvent = { eventId: 1, priority: emitter.EventPriority.LOW }; let data = new Map<string, Object>(); data.set(“content”, “c”); data.set(“id”, 1); data.set(“isEmpty”, false); let eventData: emitter.EventData = { data }; // 发送eventId为1的事件,事件内容为eventData emitter.emit(event, eventData); }

@Entry @Component struct Index { @State message: string = ‘Hello World’

build() { Row() { Column() { Text(“发送”).fontSize(50).fontWeight(FontWeight.Bold).onClick(() => { sendEvent(); }) Text(“注册”).fontSize(50).fontWeight(FontWeight.Bold).onClick(() => { registerEvent(); }) }.width(‘100%’) }.height(‘100%’) } }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

参考如下demo,可获取boolean类型的数值:

import emitter from ‘@ohos.events.emitter’

function registerEvent() { // 定义一个eventId为1的事件

let event: emitter.InnerEvent = { eventId: 1 };

// 收到eventId为1的事件后执行该回调

let callback = (eventData: emitter.EventData) => {

<span class="hljs-keyword">let</span> res = eventData.data

<span class="hljs-keyword">let</span> content: string = res?.content

<span class="hljs-keyword">let</span> id: number = res?.id

<span class="hljs-keyword">let</span> isEmpty: boolean = res?.isEmpty

console.info(<span class="hljs-string">'event callback content='</span> + <span class="hljs-built_in">JSON</span>.stringify(eventData))

console.info(<span class="hljs-string">'isEmpty'</span> + isEmpty + <span class="hljs-string">'typeof isEmpty'</span> + <span class="hljs-keyword">typeof</span> isEmpty)

isEmpty

};

// 订阅eventId为1的事件

emitter.on(event, callback); }

function sendEvent() { // 定义一个eventId为1的事件,事件优先级为Low

let event: emitter.InnerEvent = { eventId: 1, priority: emitter.EventPriority.LOW };

let eventData: emitter.EventData = {

data: {

  content: <span class="hljs-string">'c'</span>,

  id: <span class="hljs-number">1</span>,

  isEmpty: <span class="hljs-literal">false</span>

}

};

// 发送eventId为1的事件,事件内容为eventData

emitter.emit(event, eventData);

}

@Entry @Component struct Index { @State message: string = ‘Hello World’

build() {

Row() {

  Column() {

    Text(<span class="hljs-string">"发送"</span>)

      .fontSize(<span class="hljs-number">50</span>)

      .fontWeight(FontWeight.Bold)

      .onClick(() =&gt; {
        sendEvent();
      })

    Text(<span class="hljs-string">"注册"</span>)

      .fontSize(<span class="hljs-number">50</span>)

      .fontWeight(FontWeight.Bold)

      .onClick(() =&gt; {
        registerEvent();
      })
  }

  .width(<span class="hljs-string">'100%'</span>)
}

.height(<span class="hljs-string">'100%'</span>)

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

更多关于HarmonyOS 鸿蒙Next EmitterData我在接收端如何解析?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,Next EmitterData的解析涉及对系统提供的数据结构和API的理解。接收端解析EmitterData时,通常需要通过以下步骤进行:

  1. 获取EmitterData: 首先,确保接收端正确地从发送端接收到了EmitterData对象。这通常通过系统提供的通信机制(如IPC)实现。

  2. 解析数据结构: EmitterData可能包含多种类型的数据,如事件类型、时间戳、数据内容等。你需要根据EmitterData的定义,使用相应的数据结构进行解析。

  3. 读取数据字段: 通过访问EmitterData对象中的各个字段,获取所需的数据。例如,如果EmitterData包含位置信息,你需要读取相应的位置字段。

  4. 处理数据: 根据业务需求,对解析后的数据进行处理。这可能包括数据转换、存储、显示等。

  5. 错误处理: 在解析过程中,可能会遇到数据格式不正确、字段缺失等问题。需要添加错误处理逻辑,确保系统的健壮性。

具体的解析方法和代码实现,需要参考HarmonyOS的官方文档和API说明。如果文档中没有提供详细的解析示例,你可以查阅相关的开发者论坛或社区,获取更多帮助。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部