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

鸿蒙应用开发之用户首选项(Preferences)使用

在HarmonyOS应用开发中,经常需要实现数据存储功能功能,包括:

  1. 登录数据
  2. 缓存数据

等等

如何利用HarmonyOS提供的Preferences服务实现这些数据的存储?

作为鸿蒙轻量数据持久化的首选,Preferences 以文本形式存储键值对,应用启动时全量加载到内存,读写效率极高,但不适合存储大量数据(内存占用会随数据量增长而增大)。​

❶ 适用场景快速判断​

适用存储场景(如下图中 1、2、3、5、6、10、11) 针对于小白开发者来说可以推敲下为什么这些场景要用Preferences来存储而不是api接口直接获取展示🤔。

快速判断标准:​

单条数据(原始类型 / 单个对象)→ 直接用 Preferences​

多条对象 / 复杂结构数据 → 切换关系型数据库

❷ 基础开发 3 步走(快速上手)​

2.1. 导入核心模块​

import { preferences } from '@kit.ArkData';

2.2. 获取 Preferences 实例​

通过上下文创建实例,name为存储到磁盘的文件名:​

// 简洁写法
const dataPreferences = preferences.getPreferencesSync(this.context, { name: 'myStore' });

2.33. 核心 API 使用(存 / 读 / 删)​

存储​ putSync(键, 值) + flush()​ putSync写入内存,flush()同步到磁盘(实现持久化)​

读取 ​getSync(键, 默认值)​  从内存中读取,应用重启后会从磁盘加载到内存​

删除 ​deleteSync(键)​  从内存中删除,需配合flush()同步到磁盘​

​⚠️ 关键提醒:

Preferences 数据持久化功能必须在模拟器或真机上运行,预览模式无法生效!​

Preferences 数据持久化功能必须在模拟器或真机上运行,预览模式无法生效!​

Preferences 数据持久化功能必须在模拟器或真机上运行,预览模式无法生效!​

磁盘文件路径:/data/app/el2/100/base/应用唯一标识/haps/entry/preferences/文件名(可通过 Device File Browser 查看)​

❸ 实战封装:PreferencesUtil 工具类

3.1 工具类代码(utils/PreferencesUtil.ets)

工作推荐api改成异步 这里为了减少代码用的同步

import { common } from '@kit.AbilityKit';
import { preferences } from '@kit.ArkData';class PreferencesUtil {// 私有实例,避免外部修改private dataPreferences: preferences.Preferences | null = null;/*** 初始化 Preferences(在entryability中调用)* @param context 上下文环境*/loadPreferences(context: common.UIAbilityContext) {if (!this.dataPreferences) {this.dataPreferences = preferences.getPreferencesSync(context, { name: 'myStore' });}}/*** 存储数据到内存(需配合flush同步到磁盘)* @param key 键* @param value 值(支持原始类型/单个对象)*/put(key: string, value: preferences.ValueType) {this.dataPreferences?.putSync(key, value);}/*** 从内存读取数据* @param key 键* @param defaultValue 默认值* @returns 存储的值或默认值*/get(key: string, defaultValue: preferences.ValueType) {return this.dataPreferences?.getSync(key, defaultValue) ?? defaultValue;}/*** 存储并同步到磁盘(推荐优先使用)* @param key 键* @param value 值*/flush(key: string, value: preferences.ValueType) {this.put(key, value);this.dataPreferences?.flushSync(); // 同步到磁盘,确保持久化}
}// 导出单例对象(全局唯一)
export const preferencesUtil = new PreferencesUtil();

3.2 初始化工具类(entryability 中)

import { preferencesUtil } from '../utils/PreferencesUtil';export default class EntryAbility extends UIAbility {onWindowStageCreate(windowStage) {// 初始化 Preferences(仅需调用一次)preferencesUtil.loadPreferences(this.context);// ...其他逻辑}
}

3.3 使用

import { preferencesUtil } from '../utils/PreferencesUtil';@Entry
@Component
struct Index {build() {Column({ space: 10 }).width('100%').height('100%').justifyContent(FlexAlign.Center) {Button('存储用户信息').onClick(() => {preferencesUtil.flush('userName', '神龙教主');preferencesUtil.flush('isLogin', true);});Button('读取用户信息').onClick(() => {const userName = preferencesUtil.get('userName', '匿名用户');const isLogin = preferencesUtil.get('isLogin', false);console.log(`用户名:${userName},登录状态:${isLogin}`);});}
}

鸿蒙开发者班级

http://www.jsqmd.com/news/135765/

相关文章:

  • 在CentOS云服务器上安装LAMP(Linux, Apache, MySQL, PHP)环境
  • 别再盲目手写论文了!6款AI写论文工具,真实参考文献,AIGC率低至11%
  • 基于PLC的自动门控制系统设计感应门控制博图HMI仿真组态
  • gazebo栅格地图生成(ros1/ros2均可启用)
  • MTPA数值求解的两种方法
  • 我发现数据中心冷却成本骤降后来才知道是ACTN动态优化温控策略的隐藏技巧
  • 2025 核心DeepSeek推广公司大全 - 品牌2025
  • 日总结 44
  • Python 的类型提示(type hint)
  • ServiceWorker 通信
  • 鸿蒙应用开发之通过ListItemGroup、nestedScroll实现商城活动可折叠分组滚动效果
  • 推出新型面向 AI 加速器的高性能编程框架——PyPTO
  • Java计算机毕设之基于springboot的公司财务预算管理系统财务收支管理 收入/支出记录(完整前后端代码+说明文档+LW,调试定制等)
  • VMware替代 | ZStack Cloud与NSX二层三层网络对比分析
  • 2025 年公众号排版软件怎么选?6 款主流编辑器真实横评
  • 18.0环实现线程和进程的监控(ObRegisterCallbacks函数)-Windows驱动
  • Dockerfile
  • 【Linux】进程控制(2)进程等待
  • 硬件有限,如何部署“大”模型?AMCT模型压缩工具3步解忧
  • 有关LangChain
  • 软件工程学习日志2025.12.24
  • 52、卷积层(填充paddinng)
  • 用NLMS实现对语音的回声的消除,共4个文件,语音原声,语音回声,NLMS的实现
  • 【毕业设计】基于springboot的公司财务预算管理系统(源码+文档+远程调试,全bao定制等)
  • 乐迪信息:煤矿皮带区域安全管控:人员违规闯入智能识别
  • 49、图像的相关知识
  • 基于VMD分解算法的信号处理与故障诊断:程序化实现及数据预测分类研究
  • 【毕业设计】基于SpringBoot+Vue技术的医疗器械管理系统设计与实现(源码+文档+远程调试,全bao定制等)
  • AUTOSAR学习资料大集合
  • 接口自动化测试框架搭建:从0到1构建企业级解决方案