HarmonyOS 鸿蒙Next API11 如何把Resource类型转换成string类型,为什么官方的示例会崩溃

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next API11 如何把Resource类型转换成string类型,为什么官方的示例会崩溃 代码如下,为什么会崩溃~ 文档-getStringSync

@Entry
@Component
struct Test {
  private context = getContext(this) as common.UIAbilityContext;
  private testStr: string = this.context.resourceManager.getStringSync($r('app.color.start_window_background').id);

  build() {
    Column() {
      Text(this.testStr)
    }
  }
}

更多关于HarmonyOS 鸿蒙Next API11 如何把Resource类型转换成string类型,为什么官方的示例会崩溃的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

10 回复

一种可能是,你提供的是color资源,getString找不到字符串类型资源,因此崩溃,试试改用’app.string.xxx’看能否正常。

更多关于HarmonyOS 鸿蒙Next API11 如何把Resource类型转换成string类型,为什么官方的示例会崩溃的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


颜色值提取

有什么办法可以把color.json文件下的颜色值以字符串的形式取出来呀?

从API 9文档看目前没有针对color类型资源的获取方式。string, number的获取方法都不能用。看之后新版是否会有接口。或者可开客服工单申请开发考虑这种需求。

getResourceColorToString(color: Resource): string { return #${AppConfig.getContext().resourceManager.getColorSync(color).toString(16)} },

// 把Resource类型转为string类型(耗时,暂时弃用) getResourceColorToString(color: Resource): string { return #${AppConfig.getContext().resourceManager.getColorSync(color).toString(16)} }

知道为啥崩溃啦,因为getStringSync这个方法不可以取color.json下的字符串,只可以取string.json文件下的字符串,那是不是可以理解:这种方法并不能把color.json文件下的颜色值以字符串的形式取出来呀

有一种笨方法,在string字符串下存“aa”,字符串为颜色代码,这样取,但不是很符合逻辑,只是相对来说好维护一些,

![cke_6685.png](data-originheight=“331” data-originwidth=“309” src="https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/706/269/612/0030086000706269612.20240426081941.44487331727823409052129132777190:50001231000000:2800:BA067FA662FDA150D6290B5956C07672790DD507C6A28368721DF24B2FC15D5A.png)

import { common } from '@kit.AbilityKit';

@Entry
@Component
struct Test {
  private context = this as common.UIAbilityContext;
  private testStr: string = this.context.resourceManager.getStringSync($r('app.string.aa').id);
  private testColor: ResourceColor= this.context.resourceManager.getColorSync($r('app.color.start_window_background').id);

  build() {
    Column () {
      Text(this.testStr).fontColor(this.testColor)

      Text(`颜色 ${this.testColor}`)
    }
  }
}

用异步的吧,这个同步方法好像是新加的,可能不太稳定吧

import resourceManager from '@ohos.resourceManager';

import { BusinessError } from '@ohos.base';

resourceManager.getResourceManager().then((mgr: resourceManager.ResourceManager) => {
  mgr.getStringValue($r('app.string.test').id, (error: BusinessError, value: string) => {
    if (error != null) {
      console.error("error is " + error);
    } else {
      let str = value;
    }
  });
}).catch((error: BusinessError) => {
  console.error("error is " + error);
});
getResourceManager 报错说这个API是在fa模型下使用的,我的是stage模型,

在HarmonyOS鸿蒙Next API11中,Resource类型通常用于表示资源ID,如字符串资源、图片资源等。要将Resource类型转换为string类型,可以使用ResourceManagergetString方法。以下是一个示例代码:

import resourceManager from '@ohos.resourceManager';

let context = ...; // 获取当前上下文
let resource = $r('app.string.my_string'); // 获取资源对象

resourceManager.getString(context, resource.id).then((value) => {
    console.log(value); // 输出转换后的字符串
}).catch((error) => {
    console.error("Failed to get string: " + error);
});

官方示例崩溃的原因可能包括:

  1. 上下文(context)未正确传递或为空。
  2. 资源ID无效或不存在。
  3. 异步操作未正确处理,导致未捕获的异常。

确保上下文正确传递,资源ID有效,并正确处理异步操作,可以避免崩溃。

在HarmonyOS鸿蒙Next API11中,将Resource类型转换为string类型,可以使用ResourceManager.getString()方法。官方示例崩溃可能是由于未正确初始化ResourceManager或资源ID无效。确保在调用前已正确获取ResourceManager实例,并检查资源ID是否存在。示例代码如下:

ResourceManager resourceManager = getResourceManager();
String stringValue = resourceManager.getString(ResourceTable.String_your_string_id);

确保your_string_idresources/base/element/string.json中正确定义。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!