HarmonyOS鸿蒙Next中Resource转String获取为空

HarmonyOS鸿蒙Next中Resource转String获取为空

//string.json

{ "name": "commodity_network_title", "value": "Network Standard" }

//Page.ets
@Entry
@Component
struct Page {
  private testStr: string = this.getUIContext().getHostContext()!.resourceManager.getStringSync($r('app.string.commodity_network_title').id);

  build() {
    Text("答案是:"+this.testStr)
  }
}

代码如上,HarmonyOS Next 想实现Resource类型转string类型。能够捕获到value值,但是现在这种方式不行,请问有什么解决方案


更多关于HarmonyOS鸿蒙Next中Resource转String获取为空的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

楼主你好,上述代码未发现问题,可以正常获取、显示文本内容

更多关于HarmonyOS鸿蒙Next中Resource转String获取为空的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我使用真机是能够正常看到的

cke_154.png

private testStr: string = this.getUIContext().getHostContext()!.resourceManager.getStringSync($(r('app.string.h_zr_release_to_load').id));
ListItem() {
  Text("答案是:" + this.testStr)
}

楼主你好,代码没问题,真机和模拟器可以正常获取,代码中涉及上下文、资源管理器时请使用真机或模拟器进行尝试

如果你是跨包获取 Resource,请使用 createModuleContext 方法来构建目标模块的上下文,只有正确构建目标模块的上下文才能跨包访问到目标模块里的资源。

注意需配合以下方法一起使用:

getStringByNameSync

示例:

// 构建名称为 basic 模块的上下文
targetModuleContext = getContext(this).createModuleContext("basic")

// 获取目标模块中的 string 资源
this.targetModuleContext.resourceManager.getStringByNameSync('valueName')

在HarmonyOS Next中,Resource转String获取为空通常是由于以下原因:

  1. 资源ID不正确
  2. 资源文件未正确编译
  3. 上下文(Context)不正确

解决方法:

  • 检查资源ID是否匹配
  • 确认资源文件位于resources/base/element目录
  • 使用正确的Context对象
  • 确保调用getString()时资源已加载

典型代码示例:

let str = this.context.resourceManager.getString($r('app.string.my_string').id);

在HarmonyOS Next中,Resource转String的正确方式应该是使用$r直接获取字符串资源,而不是通过id转换。你的代码可以修改为:

@Entry
@Component
struct Page {
  private testStr: string = $r('app.string.commodity_network_title').toString();

  build() {
    Text("答案是:" + this.testStr)
  }
}

或者使用资源管理器:

@Entry
@Component
struct Page {
  private testStr: string = getContext().resourceManager.getStringSync($r('app.string.commodity_network_title').id);

  build() {
    Text("答案是:" + this.testStr)
  }
}

注意确保资源路径app.string.commodity_network_title正确,且string.json文件位置在resources目录下。

回到顶部