HarmonyOS 鸿蒙Next:调用native方法返回object对象,如何将object对象强转为具体实体对象。问题场景描述:FIDO调底层TLV序列化时使用

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

HarmonyOS 鸿蒙Next:调用native方法返回object对象,如何将object对象强转为具体实体对象。问题场景描述:FIDO调底层TLV序列化时使用 调用native方法返回object对象,如何将object对象强转为具体实体对象。 问题场景描述:FIDO调底层TLV序列化时使用

2 回复

看起来没有影响,入参一致的情况下,native方法处理完全一样;返回值取得的时候都用Object承载,实际ArkTs侧定义的时候不同即可;instanceof 不同对象均为true ,可以直接调用对象方法 ArkTs侧:

Button(‘C++ call ArkTS-返回对象 Mango & Mango2’).fontSize(30).fontWeight(FontWeight.Bold).onClick(() => { hilog.info(0x0000, TAG, ‘C++ call ArkTS-返回对象Mango & Mango2’); let ret: Object = world.nativeCallArkTS2((str: string): object => Mango.getMySelf(str)); if (ret instanceof Mango) { hilog.info(0x00000, TAG, ‘属于mango’); hilog.info(0x00000, TAG, ’ ret.name:’ + ret.name); } else { hilog.error(0x00000, TAG, ‘不属于mango’); } let ret2: Object = world.nativeCallArkTS2((str: string): object => Mango2.getMySelf2(str)); if (ret2 instanceof Mango2) { hilog.info(0x00000, TAG, ‘属于mango2’); hilog.info(0x00000, TAG, ’ ret2.name:’ + ret2.name); } else { hilog.error(0x00000, TAG, ‘不属于mango2’); } }).margin({ bottom: ‘5%’ })

Native侧:

export const nativeCallArkTS2: (a: object) => object;

更多关于HarmonyOS 鸿蒙Next:调用native方法返回object对象,如何将object对象强转为具体实体对象。问题场景描述:FIDO调底层TLV序列化时使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,当你调用native方法返回一个object对象,并希望将其强转为具体的实体对象时,可以通过以下步骤实现:

  1. 确保Native方法返回的对象类型正确:

    • 在native层,确保返回的对象类型与你期望的实体对象类型一致。这通常涉及到native代码中对对象类型的严格控制和返回。
  2. 使用JNI(Java Native Interface)进行类型转换:

    • 在Java层,通过JNI接收到的object对象通常是一个java.lang.Object的实例。
    • 使用Java的强制类型转换(cast)功能,将这个java.lang.Object实例转换为具体的实体对象类型。例如,如果你的实体类是MyEntity,你可以这样做:MyEntity entity = (MyEntity) nativeMethodReturnObject;
  3. 处理可能的类型转换异常:

    • 强制类型转换时,如果native返回的对象不是MyEntity类型,将抛出ClassCastException。因此,最好进行异常处理,以确保程序的健壮性。
  4. 验证对象状态:

    • 转换后,验证对象的状态是否符合预期,以确保native层正确构造并返回了对象。

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

回到顶部