123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- import preferences from '@ohos.data.preferences';
- import common from '@ohos.app.ability.common';
- // 定义支持的数据类型
- type ValueType = number | string | boolean | number[] | string[] | boolean[];
- type PreferencesData = Record<string, ValueType>;
- class PreferencesUtil {
- // 缓存多个 Preferences 实例
- private prefMap: Map<string, preferences.Preferences> = new Map();
- /**
- * 加载 Preferences 文件
- * @param context 应用上下文
- * @param name 文件名(如 'userConfig')
- */
- async loadPreference(context: common.Context, name: string): Promise<void> {
- try {
- const pref = await preferences.getPreferences(context, name);
- this.prefMap.set(name, pref);
- console.log(`[PreferencesUtil] 加载文件 "${name}" 成功`);
- } catch (err) {
- console.error(`[PreferencesUtil] 加载失败: ${JSON.stringify(err)}`);
- }
- }
- /**
- * 写入数据(自动刷盘)
- * @param fileName 文件名
- * @param key 键名
- * @param value 值(支持6种类型)
- */
- async put(fileName: string, key: string, value: ValueType): Promise<void> {
- const pref = this.prefMap.get(fileName);
- if (!pref) {
- console.warn(`[PreferencesUtil] 文件未加载: ${fileName}`);
- return;
- }
- try {
- await pref.put(key, value);
- await pref.flush(); // 立即持久化
- console.log(`[PreferencesUtil] 保存 ${fileName}.${key} = ${value}`);
- } catch (err) {
- console.error(`[PreferencesUtil] 写入失败: ${JSON.stringify(err)}`);
- }
- }
- /**
- * 读取数据(带默认值)
- * @param fileName 文件名
- * @param key 键名
- * @param defaultValue 默认值
- * @returns 类型安全的返回值
- */
- async get<T extends ValueType>(
- fileName: string,
- key: string,
- defaultValue: T
- ): Promise<T> {
- const pref = this.prefMap.get(fileName);
- if (!pref) {
- console.warn(`[PreferencesUtil] 文件未加载: ${fileName}`);
- return defaultValue;
- }
- try {
- const value = await pref.get(key, defaultValue);
- console.log(`[PreferencesUtil] 读取 ${fileName}.${key} = ${value}`);
- return value as T; // 泛型类型断言
- } catch (err) {
- console.error(`[PreferencesUtil] 读取失败: ${JSON.stringify(err)}`);
- return defaultValue;
- }
- }
- /**
- * 删除指定键值
- * @param fileName 文件名
- * @param key 键名
- */
- async delete(fileName: string, key: string): Promise<void> {
- const pref = this.prefMap.get(fileName);
- if (!pref) return;
- try {
- await pref.delete(key);
- await pref.flush();
- console.log(`[PreferencesUtil] 删除键值: ${fileName}.${key}`);
- } catch (err) {
- console.error(`[PreferencesUtil] 删除失败: ${JSON.stringify(err)}`);
- }
- }
- /**
- * 清空文件数据
- * @param fileName 文件名
- */
- async clear(fileName: string): Promise<void> {
- const pref = this.prefMap.get(fileName);
- if (!pref) return;
- try {
- await pref.clear();
- await pref.flush();
- console.log(`[PreferencesUtil] 已清空文件: ${fileName}`);
- } catch (err) {
- console.error(`[PreferencesUtil] 清空失败: ${JSON.stringify(err)}`);
- }
- }
- }
- // 导出单例(全局使用)
- const preferencesUtil = new PreferencesUtil();
- export default preferencesUtil;
|