鸿蒙三方库 | harmony-utils之PreferencesUtil用户首选项读写详解

前言

用户首选项(Preferences)是HarmonyOS提供的轻量级键值存储方案,适合存储少量数据,如用户设置、登录状态等。@pura/harmony-utilsPreferencesUtil 封装了首选项的读写方法。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用到实际项目中。

一、PreferencesUtil读写核心API

PreferencesUtil 提供了以下首选项读写方法:

方法 说明 返回类型 使用场景
putString(key, value) 写入字符串 void 用户名、Token
getString(key, defValue) 读取字符串 string 获取配置
putNumber(key, value) 写入数字 void 计数器、版本号
getNumber(key, defValue) 读取数字 number 获取数值
putBoolean(key, value) 写入布尔值 void 开关状态
getBoolean(key, defValue) 读取布尔值 boolean 获取状态
flush() 持久化到磁盘 void 确保数据落盘

1.1 核心特性

  • 简洁易用:封装复杂API为一行调用,降低使用门槛
  • 类型安全:完整的TypeScript类型定义,编译期即可发现错误
  • 异常处理:内置异常捕获机制,避免运行时崩溃
  • 多类型支持:支持字符串、数字、布尔值三种基本类型

1.2 数据类型对照

类型 写入方法 读取方法 默认值
字符串 putString getString ''
数字 putNumber getNumber 0
布尔值 putBoolean getBoolean false

二、完整使用步骤

2.1 安装依赖

bash 复制代码
ohpm install @pura/harmony-utils

2.2 写入首选项

typescript 复制代码
import { PreferencesUtil } from '@pura/harmony-utils';

Button('写入首选项')
  .width('100%')
  .onClick(async () => {
    try {
      await PreferencesUtil.putString('username', '张三');
      await PreferencesUtil.putNumber('age', 25);
      await PreferencesUtil.putBoolean('login', true);
      await PreferencesUtil.flush();
      this.result = '写入成功 ✅\n已持久化到磁盘';
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

2.3 读取首选项

typescript 复制代码
Button('读取首选项')
  .width('100%')
  .onClick(async () => {
    try {
      let name = await PreferencesUtil.getString('username', '默认值');
      let age = await PreferencesUtil.getNumber('age', 0);
      let login = await PreferencesUtil.getBoolean('login', false);
      this.result = `姓名: ${name}\n年龄: ${age}\n登录: ${login}`;
    } catch (e) {
      this.result = '异常: ' + e;
    }
  })

三、完整页面示例

typescript 复制代码
import { PreferencesUtil } from '@pura/harmony-utils';

@Entry
@Component
struct PreferencesDemo {
  @State result: string = '';

  build() {
    Column({ space: 12 }) {
      Button('保存设置').width('100%').onClick(async () => {
        await PreferencesUtil.putString('theme', 'dark');
        await PreferencesUtil.flush();
        this.result = '设置已保存';
      });
      Button('读取设置').width('100%').onClick(async () => {
        let theme = await PreferencesUtil.getString('theme', 'light');
        this.result = `主题: ${theme}`;
      });
      Text(this.result).fontSize(14).fontColor('#333333')
    }
    .padding(16)
  }
}

四、进阶用法

4.1 设置管理器

typescript 复制代码
import { PreferencesUtil } from '@pura/harmony-utils';

class SettingsManager {
  static async saveTheme(theme: string): Promise<void> {
    await PreferencesUtil.putString('app_theme', theme);
    await PreferencesUtil.flush();
  }

  static async getTheme(): Promise<string> {
    return await PreferencesUtil.getString('app_theme', 'light');
  }

  static async isFirstLaunch(): Promise<boolean> {
    let isFirst = await PreferencesUtil.getBoolean('first_launch', true);
    if (isFirst) {
      await PreferencesUtil.putBoolean('first_launch', false);
      await PreferencesUtil.flush();
    }
    return isFirst;
  }
}

4.2 登录状态管理

typescript 复制代码
async function saveLoginState(token: string): Promise<void> {
  await PreferencesUtil.putString('auth_token', token);
  await PreferencesUtil.putBoolean('is_logged_in', true);
  await PreferencesUtil.flush();
}

五、注意事项

  1. 数据量:Preferences适合少量数据,大量数据建议使用数据库
  2. flush调用:写入后需调用flush确保数据持久化
  3. Key命名:建议使用有意义的key命名,避免冲突
  4. 初始化依赖 :使用前需确保 AppUtil.init() 已调用
  5. 异步操作:读写方法为异步,需使用await

六、常见问题

Q1: flush()不调用数据会丢失吗?

不调用flush时数据保存在内存中,应用异常退出可能丢失。

Q2: 如何存储复杂对象?

可以将对象JSON序列化后以字符串形式存储。

Q3: 多个页面可以共享数据吗?

可以,Preferences是应用级存储,所有页面共享同一份数据。

Q4: 如何清除所有首选项数据?

可以逐个删除key,或清除应用数据。

总结

PreferencesUtil 的首选项读写方法为轻量级数据存储提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。开发者可以利用首选项存储用户设置、登录状态等简单数据。

本文基于 @pura/harmony-utils 工具库,更多功能请参考官方文档与后续系列文章。

相关推荐
云端漫步19877 小时前
HarmonyOS 互动卡片实战:快递卡片与睡眠卡片完整开发流程
华为·harmonyos
智塑未来8 小时前
鸿蒙6.1隐私安心加倍:加密分享、星盾防诈、应用锁三重保护,守护到位
华为·harmonyos
byte轻骑兵9 小时前
2026手机远程办公:向日葵、TeamViewer、ToDesk鸿蒙适配+传文件+AI审计功能对比
智能手机·harmonyos·todesk·teamviewer·手机远程办公
贾伟康9 小时前
【知律|06】HarmonyOS ArkTS 法律分类实战:让民法、劳动、消费等入口可维护
harmonyos·arkts·arkui·分类设计·多设备
M-Robots echo21 小时前
M-CLAW,面向具身智能的机器人任务编排开发框架
机器人·ros·鸿蒙·开源社区·m-robots
M-Robots echo1 天前
王成录:机器人产业下一个十年,拼的是 “系统级智能化” 而非单点算法堆叠
机器人·ros·鸿蒙·开源社区·m-robots·王成录
梦想不只是梦与想1 天前
鸿蒙 测试工具:DevEco Testing(一)
测试工具·harmonyos·testing
大锅盖11 天前
Web 工单要调用相机,第一步不是打开取景框,而是建立能力门禁
前端·数码相机·harmonyos
M-Robots echo1 天前
M-Robots ROS 兼容适配方案,实现存量机器人项目低成本迁移
机器人·ros·鸿蒙·开源社区·m-robots
贾伟康1 天前
【华夏二十四节气|07】HarmonyOS 6.0.2(22) ArkTS 节气搜索实战:多字段匹配与四态闭环
移动开发·harmonyos·arkts·arkui·本地搜索