HarmonyOS 字符串格式化异常

通过以下api格式化获取字符串,运行crash。报错code提示资源id不存在,实际上是存在的。是啥问题?

let ua = getContext().resourceManager.getStringSync($r('app.string.web_ua_2').id, 'stg', 'stg', 'stg', 'stg')

string.json中的资源为:

{  
  "name": "web_ua_2",  
  "value": "%1$s 111 222 %2$s 333 %3$s 444 %4$s"  
}

error内容:

Error message:Resource id invalid  
Error code:9001001

SourceCode:

  let ua = getContext()  
    .resourceManager  
    .getStringSync({  
      "id": 67108978,  
      "type": 10003,  
      params: [],  
      "bundleName": "com.pingan.eclaim.test",  
      "moduleName": "lib_web"  
    }.id, 'stg', 'stg', 'stg', 'stg');
HarmonyOS
2024-10-22 10:51:15
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

1、如果是在HAP包中使用resourceManager,请确认当前ability是哪种类型的ability,如果是UIExtensionAbility的话,需要申请ohos.permission.ACCESS_BUNDLE_DIR权限,因为UIExtensionAbility的context在使用resourceManager时有限制,没有UIAbility的权限大。

2、如果是在HSP包中使用resourceManager,需要使用HSP上下文的resourceManager来获取相关目录下的资源文件。

let message = getContext().createModuleContext("hspmodulename").resourceManager.getString...

请先按照这个排查一下:

9001007 根据当前id获取的资源格式化失败。

错误信息:

If the resource obtained by resId formatting error.

错误描述:

resId获取的字符串资源格式化失败。

可能原因

1、参数类型不在支持范围内。

2、参数与占位符个数不等。

3、参数与占位符类型不匹配。

处理步骤:

查看args参数类型与占位符的个数、类型是否一致。

$符号去掉。

如果是单个占位符,沿用之前的写法%1d可以识别,如果是有多个占位符的,要去掉1, HarmonyOS 只识别%d, %f, %s这些。

格式化字符串资源参数不正确。参考链接:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-localization-kit/js-apis-resource-manager.md#getstringsync10

如果是单个占位符,沿用之前的写法%1d可以识别,如果是有多个占位符的,要去掉1, HarmonyOS 只识别%d, %f, %s这些。

例:

resourceManager.getStringSync(’%d 主动开启维修模式,或%s’, 1, ‘联系客服’)

这里只有一个占位符的可以用 %s %d 或者 %1$s,但是对于有多个占位符的只能用 %s %d,例如

'%d.关于%s的几点意见,详见%s'。

分享
微博
QQ
微信
回复
2024-10-22 17:10:57
相关问题
如何格式化字符串,有人知道吗?
437浏览 • 1回复 待解决
HarmonyOS 字符串显示异常
461浏览 • 1回复 待解决
HarmonyOS 如何支持html格式字符串
162浏览 • 1回复 待解决
HarmonyOS DateFormat格式化
585浏览 • 1回复 待解决
格式化console输出日志格式-美观
373浏览 • 1回复 待解决
HarmonyOS 时间格式化问题
76浏览 • 1回复 待解决
HarmonyOS 时间日期格式化
765浏览 • 1回复 待解决
HarmonyOS如何实现日期格式化转换
744浏览 • 1回复 待解决
HarmonyOS Uint8Array格式字符串的方法
850浏览 • 1回复 待解决
检查字符串是否以给定的字符串开头
535浏览 • 1回复 待解决
HarmonyOS字符串替换问题
865浏览 • 1回复 待解决
Dev EcoStudio如何格式化代码
3797浏览 • 1回复 已解决
HarmonyOS $r 字符串替换问题
911浏览 • 1回复 待解决
检查字符串是否以给定的字符串结尾
422浏览 • 1回复 待解决
HarmonyOS 如何将时间戳格式化
40浏览 • 1回复 待解决
HarmonyOS 如何将时间进行格式化
316浏览 • 1回复 待解决
保存自动格式化代码如何配置
468浏览 • 1回复 待解决