HarmonyOS 鸿蒙Next getStringByName方法二次封装
HarmonyOS 鸿蒙Next getStringByName方法二次封装
为使用方便简单二次封装了一下getStringByName方法,用于向资源库读取stirng.json对应name的value值,但是有点小问题。
这是个异步方法,有时(有的场景)页面代码跑的快,数据还没更新过来,导致显示内容是空的,如何二次封装为同步方法?或其它封装、调用技巧?
我暂时用setTimeout()方法为临时方案,虽有效果,但感觉不靠谱
封装代码:
// StringByName.etx
import { BusinessError } from '@ohos.base';
import { common } from '@kit.AbilityKit';
class StringByName {
context = getContext(this) as common.UIAbilityContext
async stringByName(name: string): Promise<string> {
return new Promise((resolve, reject) => {
this.context.resourceManager.getStringByName(name, (error: BusinessError | null, value: string) => {
if (error) {
reject(error); // 使用reject来拒绝Promise
// console.log('stringByNameErr:'+JSON.stringify(error))
} else {
resolve(value); //使用resolve来解决Promise
// console.log('stringByNameValue:'+value)
}
});
});
}
}
export default new StringByName();
//调用代码:
import StringByName from '../......../StringByName';
@State Pull_to_load_more: string = ''
@State Release_to_load: string = ''
@State Happily_loading: string = ''
//------------
StringByName.stringByName('Pull_to_load_more').then(str => {
this.Pull_to_load_more = str
})
StringByName.stringByName('Release_to_load').then(str => {
this.Release_to_load = str
})
StringByName.stringByName('Happily_loading').then(str => {
this.Happily_loading = str
})
//------------
// refreshConfigurator属性设置
setTimeout(() => {//setTimeout()临时方案,目的是等待数据后再传给目标接口
this.refreshConfigurator.setLoadTextPullUp1(this.Pull_to_load_more) //'正在上拉刷新...'
this.refreshConfigurator.setLoadTextPullUp2(this.Release_to_load) //'放开刷新'
this.refreshConfigurator.setLoadTextLoading(this.Happily_loading) //'正在玩命加载中...'
}, 100)
更多关于HarmonyOS 鸿蒙Next getStringByName方法二次封装的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next getStringByName方法二次封装的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙系统中,针对getStringByName
方法进行二次封装时,主要目的是为了提高代码的可读性、复用性和维护性。假设你正在处理一个资源文件(如resources.json
)中的字符串资源,并希望通过一个封装方法来统一获取这些资源。
以下是一个简单的二次封装示例:
// 假设这是你的工具类
public class ResourceUtil {
// 封装getStringByName方法
public static String getString(String resourceName) {
// 假设存在一个全局的ResourceManager实例
ResourceManager resourceManager = ResourcesManager.getInstance();
try {
// 获取资源表中的字符串资源
Element element = resourceManager.getElement(resourceName);
if (element != null && element.isString()) {
return element.getString();
}
} catch (IOException e) {
e.printStackTrace();
}
return null; // 或者抛出异常,根据需求决定
}
}
在以上代码中,ResourceUtil
类提供了一个静态方法getString
,该方法接受一个资源名称作为参数,并返回对应的字符串资源。注意,这里假设已经存在一个全局的ResourceManager
实例,且该实例能够访问resources.json
文件。
使用时,只需调用ResourceUtil.getString("resourceName")
即可获取相应的字符串资源。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html