当前位置: 首页 > 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.gsyq.cn/news/149148.html

相关文章:

  • 推出新型面向 AI 加速器的高性能编程框架——PyPTO
  • 2025 年公众号排版软件怎么选?6 款主流编辑器真实横评
  • 18.0环实现线程和进程的监控(ObRegisterCallbacks函数)-Windows驱动
  • 有关LangChain
  • 用NLMS实现对语音的回声的消除,共4个文件,语音原声,语音回声,NLMS的实现
  • Flutter---轮播图
  • 千匠大宗电商系统:赋能煤炭能源行业产业升级
  • 2-[(1-戊炔酰基)氨基]-2-脱氧-D-葡萄糖 — 代谢调控研究的新型探针试剂 1635433-54-3
  • 51、卷积层(计算规则)
  • 【协议】vlan
  • 机械臂轨迹规划算法,基于改进灰狼加353多项式的机械臂轨迹规划时间最优算法。 改进灰狼改进的灰...
  • 基于改进鹈鹕算法(IPOA)优化BP神经网络的智能数据回归预测模型——IPOA-BP模型及其评...
  • 【技术报告解读】DeepSeek-OCR: Contexts Optical Compression
  • Java毕设选题推荐:基于java零售与仓储管理系统的设计与实现基于Java的仓库管理系统(进销存)完整设计与实战【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 内容负责人必读:构建企业GEO优化体系的几大关键
  • 烦心之烦心
  • 长忆——我的OI回忆录
  • 鸿蒙应用开发之通过Scroll、nestedScroll实现京东秒杀嵌套滚动效果
  • VMware Horizon 与 Docker 冲突排错记录
  • Iridescent:Day34
  • 2025最新!9个AI论文平台测评:继续教育写论文痛点全解析
  • 8个降AI率工具推荐!继续教育学生必看
  • 路由策略和策略路由区别是什么
  • 深入剖析WordPress插件漏洞:未授权攻击的成功之道
  • GIF压缩策略优化:从激进到智能的演进之路
  • Chap25-SeparateUI-NetThread
  • 如果计算引擎是MapReduce,那么Hive能跑Spark SQL作业吗?
  • 告别复杂笔记软件!Memos+cpolar,让你的笔记随时随地可用
  • 佳能LBP2900 linux驱动 captdriver - 童晓伟
  • 为何选择 Go 语言进行开发?