当前位置: 首页 > news >正文

鸿蒙NEXT开发Preferences工具类(ArkTs)

import { AppUtil } from './AppUtil';
import dataPreferences from '@ohos.data.preferences';
export const DEFAULT_PREFERENCE_NAME: string = "SP_HARMONY_UTILS_PREFERENCES"; // Preferences实例的名称。

/**
 * Preferences工具类
 * @author CSDN-鸿蒙布道师
 * @since 2025/04/09
 */
export class PreferencesUtil {

  private static defaultPreferenceName: string = DEFAULT_PREFERENCE_NAME;
  private static preferences: dataPreferences.Preferences;

  /**
   * 初始化Preferences实例(非必要不要初始化该方法)。
   * @param preferenceName Preferences实例的名称。
   */
  static init(preferenceName: string) {
    if (!PreferencesUtil.preferences || preferenceName !== PreferencesUtil.defaultPreferenceName) {
      PreferencesUtil.defaultPreferenceName = preferenceName;
      PreferencesUtil.preferences = dataPreferences.getPreferencesSync(AppUtil.getContext(), { name: preferenceName });
    }
  }

  /**
   * 获取Preferences实例。
   * @param preferenceName 实例名称。
   * @returns Preferences实例。
   */
  private static async getPreferences(preferenceName: string = PreferencesUtil.defaultPreferenceName): Promise<dataPreferences.Preferences> {
    if (preferenceName !== PreferencesUtil.defaultPreferenceName || !PreferencesUtil.preferences) {
      PreferencesUtil.preferences = await dataPreferences.getPreferences(AppUtil.getContext(), preferenceName);
    }
    return PreferencesUtil.preferences;
  }

  /**
   * 同步获取Preferences实例。
   * @param preferenceName 实例名称。
   * @returns Preferences实例。
   */
  private static getPreferencesSync(preferenceName: string = PreferencesUtil.defaultPreferenceName): dataPreferences.Preferences {
    if (preferenceName !== PreferencesUtil.defaultPreferenceName || !PreferencesUtil.preferences) {
      PreferencesUtil.preferences = dataPreferences.getPreferencesSync(AppUtil.getContext(), { name: preferenceName });
    }
    return PreferencesUtil.preferences;
  }

  /**
   * 将数据缓存到指定的Preferences实例中。
   * @param key 键。
   * @param value 值。
   * @param preferenceName 实例名称。
   */
  static putSync(key: string, value: dataPreferences.ValueType, preferenceName: string = PreferencesUtil.defaultPreferenceName) {
    PreferencesUtil.performSyncAction(preferenceName, (preferences) => {
      preferences.putSync(key, value);
      preferences.flush(); // 确保数据永久序列化到本地
    });
  }

  static async put(key: string, value: dataPreferences.ValueType, preferenceName: string = PreferencesUtil.defaultPreferenceName) {
    await PreferencesUtil.performAsyncAction(preferenceName, async (preferences) => {
      await preferences.put(key, value);
      await preferences.flush(); // 确保数据永久序列化到本地
    });
  }

  /**
   * 获取缓存值(同步)。
   * @param key 键。
   * @param defValue 默认值。
   * @param preferenceName 实例名称。
   * @returns 缓存值。
   */
  static getSync<T extends dataPreferences.ValueType>(key: string, defValue: T, preferenceName: string = PreferencesUtil.defaultPreferenceName): T {
    return PreferencesUtil.performSyncAction(preferenceName, (preferences) => preferences.getSync(key, defValue)) as T;
  }

  /**
   * 获取缓存值(异步)。
   * @param key 键。
   * @param defValue 默认值。
   * @param preferenceName 实例名称。
   * @returns 缓存值。
   */
  static async get<T extends dataPreferences.ValueType>(key: string, defValue: T, preferenceName: string = PreferencesUtil.defaultPreferenceName): Promise<T> {
    return PreferencesUtil.performAsyncAction(preferenceName, async (preferences) => await preferences.get(key, defValue)) as Promise<T>;
  }

  /**
   * 删除指定键的缓存值。
   * @param key 键。
   * @param preferenceName 实例名称。
   */
  static deleteSync(key: string, preferenceName: string = PreferencesUtil.defaultPreferenceName) {
    PreferencesUtil.performSyncAction(preferenceName, (preferences) => {
      preferences.deleteSync(key);
      preferences.flush(); // 确保数据永久序列化到本地
    });
  }

  static async delete(key: string, preferenceName: string = PreferencesUtil.defaultPreferenceName) {
    await PreferencesUtil.performAsyncAction(preferenceName, async (preferences) => {
      await preferences.delete(key);
      await preferences.flush(); // 确保数据永久序列化到本地
    });
  }

  /**
   * 清空所有缓存数据。
   * @param preferenceName 实例名称。
   */
  static clearSync(preferenceName: string = PreferencesUtil.defaultPreferenceName) {
    PreferencesUtil.performSyncAction(preferenceName, (preferences) => {
      preferences.clearSync();
      preferences.flush(); // 确保数据永久序列化到本地
    });
  }

  static async clear(preferenceName: string = PreferencesUtil.defaultPreferenceName) {
    await PreferencesUtil.performAsyncAction(preferenceName, async (preferences) => {
      await preferences.clear();
      await preferences.flush(); // 确保数据永久序列化到本地
    });
  }

  /**
   * 检查是否包含指定键。
   * @param key 键。
   * @param preferenceName 实例名称。
   * @returns 是否包含。
   */
  static hasSync(key: string, preferenceName: string = PreferencesUtil.defaultPreferenceName): boolean {
    return PreferencesUtil.performSyncAction(preferenceName, (preferences) => preferences.hasSync(key));
  }

  static async has(key: string, preferenceName: string = PreferencesUtil.defaultPreferenceName): Promise<boolean> {
    return PreferencesUtil.performAsyncAction(preferenceName, async (preferences) => await preferences.has(key));
  }

  /**
   * 订阅数据变更。
   * @param callback 回调函数。
   * @param preferenceName 实例名称。
   */
  static onChange(callback: Callback<string>, preferenceName: string = PreferencesUtil.defaultPreferenceName) {
    PreferencesUtil.performSyncAction(preferenceName, (preferences) => preferences.on('change', callback));
  }

  static offChange(callback?: Callback<string>, preferenceName: string = PreferencesUtil.defaultPreferenceName) {
    PreferencesUtil.performSyncAction(preferenceName, (preferences) => {
      if (callback) {
        preferences.off('change', callback);
      } else {
        preferences.off('change');
      }
    });
  }

  /**
   * 辅助方法:执行同步操作。
   * @param preferenceName 实例名称。
   * @param action 执行的操作。
   * @returns 操作的结果。
   */
  private static performSyncAction<T>(preferenceName: string, action: (preferences: dataPreferences.Preferences) => T): T {
    const preferences = PreferencesUtil.getPreferencesSync(preferenceName);
    return action(preferences); // 确保返回操作的结果
  }

  /**
   * 辅助方法:执行异步操作。
   * @param preferenceName 实例名称。
   * @param action 执行的操作。
   */
  private static async performAsyncAction<T>(preferenceName: string, action: (preferences: dataPreferences.Preferences) => Promise<T>): Promise<T> {
    const preferences = await PreferencesUtil.getPreferences(preferenceName);
    return action(preferences);
  }
}

代码如下:
import { AppUtil } from './AppUtil';
import dataPreferences from '@ohos.data.preferences';
export const DEFAULT_PREFERENCE_NAME: string = "SP_HARMONY_UTILS_PREFERENCES"; // Preferences实例的名称。

/**
 * Preferences工具类
 * @author CSDN-鸿蒙布道师
 * @since 2025/04/09
 */
export class PreferencesUtil {

  private static defaultPreferenceName: string = DEFAULT_PREFERENCE_NAME;
  private static preferences: dataPreferences.Preferences;

  /**
   * 初始化Preferences实例(非必要不要初始化该方法)。
   * @param preferenceName Preferences实例的名称。
   */
  static init(preferenceName: string) {
    if (!PreferencesUtil.preferences || preferenceName !== PreferencesUtil.defaultPreferenceName) {
      PreferencesUtil.defaultPreferenceName = preferenceName;
      PreferencesUtil.preferences = dataPreferences.getPreferencesSync(AppUtil.getContext(), { name: preferenceName });
    }
  }

  /**
   * 获取Preferences实例。
   * @param preferenceName 实例名称。
   * @returns Preferences实例。
   */
  private static async getPreferences(preferenceName: string = PreferencesUtil.defaultPreferenceName): Promise<dataPreferences.Preferences> {
    if (preferenceName !== PreferencesUtil.defaultPreferenceName || !PreferencesUtil.preferences) {
      PreferencesUtil.preferences = await dataPreferences.getPreferences(AppUtil.getContext(), preferenceName);
    }
    return PreferencesUtil.preferences;
  }

  /**
   * 同步获取Preferences实例。
   * @param preferenceName 实例名称。
   * @returns Preferences实例。
   */
  private static getPreferencesSync(preferenceName: string = PreferencesUtil.defaultPreferenceName): dataPreferences.Preferences {
    if (preferenceName !== PreferencesUtil.defaultPreferenceName || !PreferencesUtil.preferences) {
      PreferencesUtil.preferences = dataPreferences.getPreferencesSync(AppUtil.getContext(), { name: preferenceName });
    }
    return PreferencesUtil.preferences;
  }

  /**
   * 将数据缓存到指定的Preferences实例中。
   * @param key 键。
   * @param value 值。
   * @param preferenceName 实例名称。
   */
  static putSync(key: string, value: dataPreferences.ValueType, preferenceName: string = PreferencesUtil.defaultPreferenceName) {
    PreferencesUtil.performSyncAction(preferenceName, (preferences) => {
      preferences.putSync(key, value);
      preferences.flush(); // 确保数据永久序列化到本地
    });
  }

  static async put(key: string, value: dataPreferences.ValueType, preferenceName: string = PreferencesUtil.defaultPreferenceName) {
    await PreferencesUtil.performAsyncAction(preferenceName, async (preferences) => {
      await preferences.put(key, value);
      await preferences.flush(); // 确保数据永久序列化到本地
    });
  }

  /**
   * 获取缓存值(同步)。
   * @param key 键。
   * @param defValue 默认值。
   * @param preferenceName 实例名称。
   * @returns 缓存值。
   */
  static getSync<T extends dataPreferences.ValueType>(key: string, defValue: T, preferenceName: string = PreferencesUtil.defaultPreferenceName): T {
    return PreferencesUtil.performSyncAction(preferenceName, (preferences) => preferences.getSync(key, defValue)) as T;
  }

  /**
   * 获取缓存值(异步)。
   * @param key 键。
   * @param defValue 默认值。
   * @param preferenceName 实例名称。
   * @returns 缓存值。
   */
  static async get<T extends dataPreferences.ValueType>(key: string, defValue: T, preferenceName: string = PreferencesUtil.defaultPreferenceName): Promise<T> {
    return PreferencesUtil.performAsyncAction(preferenceName, async (preferences) => await preferences.get(key, defValue)) as Promise<T>;
  }

  /**
   * 删除指定键的缓存值。
   * @param key 键。
   * @param preferenceName 实例名称。
   */
  static deleteSync(key: string, preferenceName: string = PreferencesUtil.defaultPreferenceName) {
    PreferencesUtil.performSyncAction(preferenceName, (preferences) => {
      preferences.deleteSync(key);
      preferences.flush(); // 确保数据永久序列化到本地
    });
  }

  static async delete(key: string, preferenceName: string = PreferencesUtil.defaultPreferenceName) {
    await PreferencesUtil.performAsyncAction(preferenceName, async (preferences) => {
      await preferences.delete(key);
      await preferences.flush(); // 确保数据永久序列化到本地
    });
  }

  /**
   * 清空所有缓存数据。
   * @param preferenceName 实例名称。
   */
  static clearSync(preferenceName: string = PreferencesUtil.defaultPreferenceName) {
    PreferencesUtil.performSyncAction(preferenceName, (preferences) => {
      preferences.clearSync();
      preferences.flush(); // 确保数据永久序列化到本地
    });
  }

  static async clear(preferenceName: string = PreferencesUtil.defaultPreferenceName) {
    await PreferencesUtil.performAsyncAction(preferenceName, async (preferences) => {
      await preferences.clear();
      await preferences.flush(); // 确保数据永久序列化到本地
    });
  }

  /**
   * 检查是否包含指定键。
   * @param key 键。
   * @param preferenceName 实例名称。
   * @returns 是否包含。
   */
  static hasSync(key: string, preferenceName: string = PreferencesUtil.defaultPreferenceName): boolean {
    return PreferencesUtil.performSyncAction(preferenceName, (preferences) => preferences.hasSync(key));
  }

  static async has(key: string, preferenceName: string = PreferencesUtil.defaultPreferenceName): Promise<boolean> {
    return PreferencesUtil.performAsyncAction(preferenceName, async (preferences) => await preferences.has(key));
  }

  /**
   * 订阅数据变更。
   * @param callback 回调函数。
   * @param preferenceName 实例名称。
   */
  static onChange(callback: Callback<string>, preferenceName: string = PreferencesUtil.defaultPreferenceName) {
    PreferencesUtil.performSyncAction(preferenceName, (preferences) => preferences.on('change', callback));
  }

  static offChange(callback?: Callback<string>, preferenceName: string = PreferencesUtil.defaultPreferenceName) {
    PreferencesUtil.performSyncAction(preferenceName, (preferences) => {
      if (callback) {
        preferences.off('change', callback);
      } else {
        preferences.off('change');
      }
    });
  }

  /**
   * 辅助方法:执行同步操作。
   * @param preferenceName 实例名称。
   * @param action 执行的操作。
   * @returns 操作的结果。
   */
  private static performSyncAction<T>(preferenceName: string, action: (preferences: dataPreferences.Preferences) => T): T {
    const preferences = PreferencesUtil.getPreferencesSync(preferenceName);
    return action(preferences); // 确保返回操作的结果
  }

  /**
   * 辅助方法:执行异步操作。
   * @param preferenceName 实例名称。
   * @param action 执行的操作。
   */
  private static async performAsyncAction<T>(preferenceName: string, action: (preferences: dataPreferences.Preferences) => Promise<T>): Promise<T> {
    const preferences = await PreferencesUtil.getPreferences(preferenceName);
    return action(preferences);
  }
}

http://www.dtcms.com/a/122669.html

相关文章:

  • Python生成器与列表的对照使用详解
  • 2025高教社杯全国大学生数学建模竞赛——5个月备赛规划
  • Spring Boot 启动后自动执行 Service 方法终极指南
  • 正则表达式补充——python
  • leetcode_707. 设计链表_java
  • Leetcode 34.在排序数组中查找元素的第一个和最后一个位置
  • 游戏引擎学习第211天
  • 毫米波测试套装速递!高效赋能5G/6G、新材料及智能超表面(RIS)研发
  • Stable Diffusion + CelebA-Dialog 数据集:不同数据集文本标签格式不一致?我的实验记录
  • python学智能算法(十)|机器学习逻辑回归(Logistic回归)
  • Django学习记录-2-数据库
  • mysql的下载和安装2025.4.8
  • 计算机网络——传输层(Udp)
  • Java 原型模式 详解
  • 如何在Linux系统上通过命令调用本地AI大模型?
  • qt之opengl使用
  • 【精品PPT】2025固态电池知识体系及最佳实践PPT合集(36份).zip
  • 移动端六大语言速记:第11部分 - 内存管理
  • ChatGPT 4:引领 AI 创作新时代
  • [ctfshow web入门] web29
  • 基于FreeRTOS和LVGL的多功能低功耗智能手表(硬件篇)
  • 微服务篇——SpringCloud
  • 【Ai/Agent】Windows11中安装CrewAI过程中的错误解决记录
  • Python如何用科技点亮触感世界——智能盲文翻译器开发全解析
  • SQL语句
  • 论文阅读笔记:Adaptive Multi-Modal Cross-Entropy Loss for Stereo Matching
  • 封装uniapp request promise化
  • 音视频生命探测仪,救援现场的“视听先锋”|鼎跃安全
  • 我们如何控制调度 C、C++ 中的线程执行?
  • HTTP 压力测试工具autocannon(AI)