Preferences 存储结构化数据:设置项与布尔标识的保存方案

适配版本:HarmonyOS 5.0.0 或以上
阅读目标:掌握 Preferences 本地持久化方案的使用,适用于开关项、配置项的保存与读取


🧱 一、什么是 Preferences?

Preferences 是 HarmonyOS 提供的轻量级结构化键值存储模块,支持持久化存储到本地文件系统,适合用于:

  • 用户偏好设置(如是否开启推送)

  • 简单配置项(如主题选择、是否第一次启动)

  • 小体积状态缓存(适合结构化访问)

✔ 与 LocalStorage 不同,Preferences 是真正落盘存储,并支持异步读取写入


🧰 二、模块导入与创建 Preferences 实例

import preferences from '@ohos.data.preferences'

let prefs: preferences.Preferences

async function initPrefs() {
  prefs = await preferences.getPreferences(getContext(this), 'user_config')
}

📁 'user_config' 为你定义的文件名,存储路径为私有沙盒目录。


🧪 三、保存与读取布尔值配置项(开关按钮)

示例场景:是否开启消息推送

@Entry
@Component
struct PushSetting {
  @State enablePush: boolean = false

  async aboutToAppear() {
    const prefs = await preferences.getPreferences(getContext(this), 'user_config')
    this.enablePush = await prefs.get('push_enabled', false)
  }

  async togglePush(value: boolean) {
    this.enablePush = value
    const prefs = await preferences.getPreferences(getContext(this), 'user_config')
    await prefs.put('push_enabled', value)
    await prefs.flush() // ⚠️ 必须 flush() 才会写入文件
  }

  build() {
    Column() {
      Text('是否开启推送通知')
        .fontSize(18)
        .margin({ bottom: 10 })

      Toggle({ checked: this.enablePush })
        .onChange(val => this.togglePush(val))
    }
    .padding(20)
  }
}

🧩 四、支持的数据类型

类型使用方法示例
stringprefs.put('nickname', '张三')
numberprefs.put('age', 15)
booleanprefs.put('vip', true)
object❌ 不支持直接存对象(建议转 JSON)

⚠️ 若需存储数组或对象,请先 JSON.stringify(),读取后再 JSON.parse()


🧾 五、完整封装:读取 + 写入工具函数

export async function setConfig(key: string, value: string | boolean | number) {
  const prefs = await preferences.getPreferences(getContext(globalThis), 'user_config')
  await prefs.put(key, value)
  await prefs.flush()
}

export async function getConfig<T = any>(key: string, defaultVal: T): Promise<T> {
  const prefs = await preferences.getPreferences(getContext(globalThis), 'user_config')
  return prefs.get(key, defaultVal)
}

✅ 六、小结

能力点实践说明
适用场景设置项、本地标志位、开关状态等
支持类型string、number、boolean,复杂对象需转 JSON
与 LocalStorage 区别Preferences 为异步持久化落盘存储方式
写入注意事项写入后必须调用 flush() 否则不会真正写入文件

📘 下一篇预告

第16篇|使用数据库 RelationalStore 存储结构化对象:适合本地表结构数据管理

将介绍如何用 HarmonyOS 提供的 SQLite 兼容接口进行复杂数据存储,如用户列表、打卡记录等。

实验目的要求 1. 巩固对HarmonyOS基础、ArkUI开发框架的理解。 2. 锻炼学生的数据存储相关设计思想。 3. 掌握鸿蒙首选项数据存储、关系数据库数据存储技术。 实验原理内容 实验原理: 1. 首选项存储(Preferences) • 核心机制:基于轻量级键值对存储,适用于少量、简单的配置数据(如用户设置、应用状态)。 • 底层实现:数据以XML或JSON格式存储在本地沙箱目录,通过内存缓存优高频访问。 • 特点:无结构约束,读写速度快,但无法支持复杂查询。 2. 关系型数据库(Relational Database) • 核心机制:基于SQLite封装,支持结构数据存储和复杂查询(如事务、联合查询)。 • 底层实现:数据以表形式存储,通过ORM(对象关系映射)或SQL语句操作,支持ACID事务特性。 • 特点:适合大量结构数据,支持数据关联性操作,但性能开销高于首选项。 4. 实验中的实现原理 • HarmonyOS Next 5.0.0提供了首选项存储(Preferences)、关系型数据库(Relational Database)的api 实验内容: • 需实现一个首选项管理器类, 含对首选项实例的存储删改成用于缓存一个已登陆的账号标识。 • 实现一个关系型数据库管理器类,可实现对数据的存储删改查,如注册页面实现数据库存取,列表页面实现从关系数据库中将数据查询出并展示展示 实验设备软件环境: 1. PC计算机 2. DevEco Studio开发环境 3. 鸿蒙系统真机 实验过程结果(可贴图) 操作异常问题解决方案 操作问题: 解决方案: 实验总结
05-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值