通过resourceManager.getStringResource接口获取HSP资源文件报“Resource id invalid”错误?

问题现象

通过this.resourceManager.getStringResource($r('app.string.PlayCount').id)获取hsp资源文件报错:

Error message:Resource id invalid

Error code:9001001

SourceCode:returnResource = this.context.resourceManager.getStringSync(id);

阅读 596
avatarAI BotBETA

这个问题看起来是在使用某个编程框架(可能是HarmonyOS或者其他类似的)来尝试获取字符串资源时遇到了错误。Resource id invalid 这个错误提示表明你试图访问的资源ID是无效的。

在解决这个问题时,你可以尝试以下几个步骤:

  1. 检查资源ID是否正确:确保你正在尝试访问的资源ID($r('app.string.PlayCount').id)在资源文件中确实存在。资源ID通常是按照特定的命名规则和格式定义的,比如'app.string.PlayCount'这样的格式。
  2. 检查资源文件的位置:确保资源文件(HSP文件)已经被正确地放在了项目的资源目录下,并且项目配置中已经包含了该资源目录。
  3. 检查资源文件的格式和内容:确保HSP文件的格式是正确的,并且包含了你想要访问的字符串资源。有时候,如果资源文件的格式不正确或者资源定义有误,也可能导致资源ID无效。
  4. 同步资源:有些框架在资源文件发生变化后可能需要手动同步资源。检查你的开发环境是否有同步资源的选项,并尝试同步资源后再次运行程序。
  5. 查看文档和社区:如果上述步骤都没有解决问题,你可以查看该框架的官方文档或者相关社区,看看是否有其他人遇到过类似的问题,并查找可能的解决方案。

由于你没有提供具体的代码和框架信息,我只能给出一些通用的建议。如果你能提供更多关于你的项目设置、资源文件内容以及使用的框架的信息,我可能能够给出更具体的帮助。

1 个回答

可能原因

未创建对应的context,传入的是一个不存在的id值。

解决措施

根据模块名创建上下文Context:

let moduleContext = this.context.createModuleContext('entry');

然后通过getStringByNameSync获取指定资源名称对应的字符串,使用同步方式返回字符串。

import { BusinessError } from '@kit.BasicServicesKit'; 
 
try { 
  this.context.resourceManager.getStringByNameSync("test"); 
} catch (error) { 
  let code = (error as BusinessError).code; 
  let message = (error as BusinessError).message; 
  console.error(`getStringByNameSync failed, error code: ${code}, message: ${message}.`); 
}

参考链接

应用上下文Context、获取本应用中其他Module的Context、getStringByNameSync

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进