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

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

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, 
              }); 
            }, 
}

预期结果是

实际上是

三、分析原因

分析:【+】的左边是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) 
  }

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:") 
  } 
... 
}

五、参考链接

应用资源

getstringbyname

onConfigurationUpdate

分享
微博
QQ
微信
回复
2024-06-12 16:52:30
相关问题
加载http资源报错。怎么办
784浏览 • 1回复 待解决
for .in 语法不支持,怎么办
810浏览 • 1回复 待解决
最新RNOH启动报错 ,怎么办
997浏览 • 1回复 待解决
运行应用提示如下内容怎么办
2478浏览 • 1回复 待解决
安装动态库失败,怎么办
609浏览 • 1回复 待解决
studio编译经常报错怎么办
640浏览 • 1回复 待解决
模拟器不能启动怎么办
432浏览 • 1回复 待解决
状态栏设置颜色失效怎么办
1987浏览 • 1回复 待解决
npm install -g serialport出错怎么办
15576浏览 • 5回复 待解决
模拟器无法创建怎么办
217浏览 • 1回复 待解决
自定义组件卡顿,怎么办
343浏览 • 1回复 待解决
自定义文件模板失效怎么办
403浏览 • 1回复 待解决
无法抓到im域名的包,怎么办
382浏览 • 1回复 待解决
有谁知道asset api调用失败怎么办?
1728浏览 • 1回复 待解决
redis 内存满了怎么办
3734浏览 • 3回复 待解决
检查字符串是否以给定的字符串开头
544浏览 • 1回复 待解决