字符串资源引用出错,该怎么办啊?

​引用字符串资源,并拼接动态获取的版本号时候出错。

HarmonyOS
2024-06-11 20:16:14
浏览
已于2024-6-12 16:54:27修改
收藏 0
回答 1
回答 1
按赞同
/
按时间
每天睡满八小时

结果展示:

代码

{ 
            id: '1', 
            style: InAppItemStyle.Arrow, 
            mainText: $r('app.string.about'), 
            desc: $r('app.string.version')+this.settingsVM.getVersion(), 
            handler: () => { 
              router.pushUrl({ 
                url: PageUrl.ABOUT, 
              }); 
            }, 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

预期结果是

实际上是

三、分析原因

分析:【+】的左边是Resource对象,右边是返回的对应的版本号(字符串),然后Resource对象隐形转换为了【Object Object】

四、解决方案

动态获取对应字符串资源信息,拼接上动态获取的版本号,并且再合适的时机更新组件。

预期结果:

页面展示时候显示的是正确的文本“版本1.0.5.100”,切换语言成英文的时候,显示正确的文本“Version1.0.5.100”

相关代码展示:

1.src/main/ets/mainability/MainAbility.ets

 onConfigurationUpdate(config: Configuration): void { 
    ... 
    //设置当前语言 
    AppStorage.setOrCreate('PAF.language',config.language) 
  }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

2.src/main/ets/pages/main/mine/settings/Settings.ets

@Entry 
@Component 
struct SettingPages { 
  @StorageProp('PAF.language') @Watch('onSystemLanguage') private version: string =""; 
... 
 aboutToAppear(){ 
   ... 
    this.buildParams(); 
  } 
/** 
   * 获取字符串的值 
   */ 
  async getSettingValue(params: string, key: string): Promise<string> { 
    if (!params) { 
      return ''; 
    } 
    let value: string; 
    if (params.startsWith(key)) { 
      if (key === '$media:') { 
        value = await getContext(this).resourceManager.getMediaBase64ByName(params.split(':').reverse()[0]); 
        return value; 
      } else if (key === '$string:') { 
        value = await getContext(this).resourceManager.getStringByName(params.split(':').reverse()[0]); 
        return value; 
      } else { 
        value =params; 
        return value; 
      } 
    } else { 
      value =params; 
      return value; 
    } 
  } 
  
  onSystemLanguage() { 
    this.buildParams(); 
  } 
  
  async buildParams(){ 
    this.version=await this.getSettingValue('$string:version',"$string:") 
  } 
... 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.

五、参考链接

应用资源

getstringbyname

onConfigurationUpdate

分享
微博
QQ
微信
回复
2024-06-12 16:52:30
相关问题
加载http资源报错。怎么办
1521浏览 • 1回复 待解决
最新RNOH启动报错 ,怎么办
1785浏览 • 1回复 待解决
for .in 语法不支持,怎么办
1752浏览 • 1回复 待解决
运行应用提示如下内容怎么办
3529浏览 • 1回复 待解决
安装动态库失败,怎么办
1344浏览 • 1回复 待解决
模拟器不能启动怎么办
1338浏览 • 1回复 待解决
studio编译经常报错怎么办
1745浏览 • 1回复 待解决
状态栏设置颜色失效怎么办
2775浏览 • 1回复 待解决
npm install -g serialport出错怎么办
17018浏览 • 5回复 待解决
模拟器无法创建怎么办
982浏览 • 1回复 待解决
HarmonyOS 获取资源文件配置字符串
690浏览 • 1回复 待解决
自定义文件模板失效怎么办
1296浏览 • 1回复 待解决
自定义组件卡顿,怎么办
1097浏览 • 1回复 待解决
无法抓到im域名的包,怎么办
1120浏览 • 1回复 待解决