HarmonyOS 鸿蒙Next getStringByName方法二次封装

发布于 1周前 作者 yuanlaile 最后一次编辑是 5天前 来自 鸿蒙OS

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

2 回复

更多关于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

回到顶部