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
楼主你好,上述代码未发现问题,可以正常获取、显示文本内容
更多关于HarmonyOS鸿蒙Next中Resource转String获取为空的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我使用真机是能够正常看到的
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获取为空通常是由于以下原因:
- 资源ID不正确
- 资源文件未正确编译
- 上下文(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目录下。