ArkTS和Native互传数组类型数据

1)ArkTS传递数组类型数据到Native层

2)Native层返回数组类型数据到ArkTS层

HarmonyOS
2024-05-22 23:35:18
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
peterlee99

使用的核心API

Node-API

Node-API支持的数据类型和接口

  • napi_get_cb_info 从给定的callback info中获取有关调用的详细信息,如参数和this指针。
  • napi_is_array 判断给定JS value是否为array
  • napi_get_array_length 获取array的length
  • napi_create_array 创建并获取一个JS Array
  • napi_get_element 获取给定Object指定索引处的元素
  • napi_set_element 在给定Object的指定索引处,设置元素

核心代码解释

  • hello.cpp
static napi_value Test(napi_env env, napi_callback_info info) { 
    size_t argc = 1; 
    napi_value args[1] = {nullptr}; 
  
    napi_get_cb_info(env, info, &argc, args , nullptr, nullptr); 
     
    bool isArray = false; 
    napi_is_array(env, args[0], &isArray); 
     
    uint32_t length = 0; 
    // 获取数组的长度 
    napi_get_array_length(env, args[0], &length); 
    OH_LOG_Print(LOG_APP, LOG_WARN, LOG_DOMAIN, "testTag", "args array length = %{public}d", length); 
  
    napi_value ret; 
    napi_create_array(env, &ret); 
    int param = 0; 
    for (int i = 0; i < length; i++) { 
        napi_value value; 
        napi_get_element(env, args[0], i, &value); 
        napi_get_value_int32(env, value, ¶m); 
        OH_LOG_Print(LOG_APP, LOG_WARN, LOG_DOMAIN, "testTag", "index = %{public}d, param = %{public}d", i, param); 
        napi_value sum; 
        napi_create_int32(env, param + param, &sum); 
        napi_set_element(env, ret, i, sum); 
    } 
     
    return ret; 
} 
  
static napi_value Init(napi_env env, napi_value exports) 
{ 
    napi_property_descriptor desc[] = { 
        {"test", nullptr, Test, nullptr, nullptr, nullptr, napi_default, nullptr}}; 
    napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 
    return exports; 
}
  •  index.d.ts
export const test: (a: number[]) => Array<number>;
  •  Index.ets
hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.test([1,2,3,4]));

实现效果

注明适配的版本信息

IDE版本:4.1.3.500

SDK版本:HarmonyOS Next Developer Preview1

分享
微博
QQ
微信
回复
2024-05-24 16:08:52
相关问题
Native与TS互传自定义obj class
513浏览 • 1回复 待解决
ArkTS简单类型变量双向数据绑定
454浏览 • 1回复 待解决
ArkTSNative如何动态加载、卸载so
901浏览 • 1回复 待解决
mysql数据类型使用int类型string类型
1285浏览 • 1回复 待解决
arkts中不支持bigint数据类型
648浏览 • 1回复 待解决
ForEach数组数据无法传输
4051浏览 • 1回复 待解决
ArkTS数组复制的方法
240浏览 • 1回复 待解决
ArkTS侧与Native侧如何进行map数据交互
984浏览 • 1回复 待解决
ArkTS如何把string转为byte数组
1411浏览 • 1回复 待解决
arkts侧hashmap转为native
475浏览 • 1回复 待解决
Native如何调ArkTS的方法
1044浏览 • 1回复 待解决
Native调用ArkTS侧类函数
394浏览 • 1回复 待解决
PixelMap数据处理(Native)
526浏览 • 1回复 待解决
如何在Native侧释放ArkTS对象
1074浏览 • 1回复 待解决