ResourcesUtils.ets 2.98 KB
import buffer from '@ohos.buffer';
import { Logger } from './Logger';

const TAG = "ResourcesUtils";

// 默认针对entry/src/main/resources/rawfile目录下的文件:
const JSON_FILE_NAME = "agconnect-services.json";

export class ResourcesUtils {
  /**
   * 获取资源字符串内容
   * @param context
   * @param filename 仅文件名(不包含路径,文件在src\main\resources\rawfile下),如:"agconnect-services.json",test.xml,
   * @returns text 字符串
   */
  static getResourcesText(context: Context, filename: string): Promise<string> {
    return new Promise((success, error) => {
      Logger.info(TAG, "ResourcesUtils getResourcesText filename:" + filename);
      context.resourceManager.getRawFileContent(filename).then((content: Uint8Array) => {
        if (!content) {
          Logger.warn(TAG, 'getResourcesText then content is empty');
          error("file is empty");
          return
        }
        try {
          let text = buffer.from(content).toString("utf8");
          if (text) {
            Logger.info(TAG, "getResourcesText then text:" + text);
            success(text);
          } else {
            Logger.warn(TAG, "getResourcesText then text is empty");
            error("resources file text is empty");
          }
        } catch (err) {
          // 转换异常
          Logger.error(TAG, `getResourcesText catch err.: ${err}`);
        }
      }).catch((err: Error) => {
        Logger.error(TAG, `getResourcesText getRawFileContent catch, error.name : ${err.name},  error.message:${err.message}`);
        error(err);
      })
    })
  }

  /**
   * 获取资源文件并转为JSON
   *
   * @param appContext 上下文
   * @param filename 仅文件名(不包含路径,文件在src\main\resources\rawfile下),如:"agconnect-services.json"
   * SubscribeListData.json
   * @returns JSON Object
   *
   * 调用方式:
   * let compRes: MGHttp.ResponseDTO<BodyComponent> = await ResourcesUtils.getResourcesJson<MGHttp.ResponseDTO<BodyComponent>>(context, 'model/componentList.json');
   */
  static getResourcesJson<R>(context:Context, filename: string): Promise<R> {
    Logger.info(TAG, `getResourcesJson filename: ${filename}`);
    return new Promise<R>((resolve, reject) => {
      ResourcesUtils.getResourcesText(context, filename)
        .then((text: string) => {
          try {
            // let config: R = JSON.parse(text)
            let config:R = JSON.parse(text) as R;
            if (config) {
              Logger.info(TAG, "getResourcesJson parse JSON file success.");
              // Logger.info(TAG, `getResourcesJson config : ${JSON.stringify(config)}`);
              resolve(config);
            } else {
              reject("getResourcesJson parse JSON file result is empty");
            }
          } catch (err) {
            // json解析异常
            Logger.error(TAG, `getResourcesJson catch parse failed.: ${err}`);
            reject(err)
          }
        })
        .catch((error:Error) => {
          reject(error)
        })
    })
  }
}