harmony OS NEXT-通过用户首选项实现数据持久化
鸿蒙通过用户首选项实现数据持久化
1.1 场景介绍
用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。当用户希望有一个全局唯一存储的地方,可以采用用户首选项来进行存储。Preferences会将该数据缓存在内存中,当用户读取的时候,能够快速从内存中获取数据,当需要持久化时可以使用flush接口将内存中的数据写入持久化文件中。Preferences会随着存放的数据量越多而导致应用占用的内存越大,因此,Preferences不适合存放过多的数据,也不支持通过配置加密,适用的场景一般为应用保存用户的个性化设置(字体大小,是否开启夜间模式)等。
2.1 运作机制
用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。当用户希望有一个全局唯一存储的地方,可以采用用户首选项来进行存储。Preferences会将该数据缓存在内存中,当用户读取的时候,能够快速从内存中获取数据,当需要持久化时可以使用flush接口将内存中的数据写入持久化文件中。Preferences会随着存放的数据量越多而导致应用占用的内存越大,因此,Preferences不适合存放过多的数据,也不支持通过配置加密,适用的场景一般为应用保存用户的个性化设置(字体大小,是否开启夜间模式)等。
- 每个key的value的长度最大为8kb
- 创建首选项-仓库的概念-应用可以有N个仓库,一个仓库中可以有N个key

3.1 接口说明
| 接口名称及方法签名 | 描述 | 参数 | 同步/异步类型 | 约束条件 | 
|---|---|---|---|---|
| getPreferencesSync(context: Context, options: Options): Preferences | 获取 Preferences实例 | context: 上下文对象options: 配置选项 | 同步 | 存在对应的异步接口 | 
| putSync(key: string, value: ValueType): void | 写入键值对(需调用 flush持久化存储) | key: 键名value: 值(需满足ValueType类型要求) | 同步 | 存在异步接口 | 
| hasSync(key: string): boolean | 检查是否包含指定键的键值对 | key: 键名 | 同步 | - 键名不能为空 - 存在异步接口 | 
| getSync(key: string, defValue: ValueType): ValueType | 获取键对应的值(若为空或类型不匹配则返回 defValue) | key: 键名defValue: 默认值 | 同步 | 存在异步接口 | 
| deleteSync(key: string): void | 删除指定键的键值对 | key: 键名 | 同步 | 存在异步接口 | 
| flush(callback: AsyncCallback<void>): void | 将数据异步持久化到文件 | callback: 异步回调 | 异步 | - | 
| on(type: 'change', callback: Callback<string>): void | 订阅数据变更事件(在 flush后触发) | type: 事件类型(仅支持'change')callback: 回调函数(参数为变更的key) | - | - | 
| off(type: 'change', callback?: Callback<string>): void | 取消订阅数据变更事件 | type: 事件类型('change')callback: 可选回调函数 | - | 若未指定 callback则取消全部订阅 | 
| deletePreferences(context: Context, options: Options, callback: AsyncCallback<void>): void | 从内存移除实例并删除持久化文件(若有) | context: 上下文对象options: 配置选项callback: 异步回调 | 异步 | - | 
4.1 开发步骤
1.导入@kit.ArkData模块。
import { preferences } from "@kit.ArkData";
2.获取preference实例,拿到仓库
getPreferenceSync接受两个参数,其中一个参数是context,另一个参数是options
- 
  context代表了用户的上下文,是ability的能力级,也是ability的一个环境,这个东西如果想要获取分两种情况- 
    在ability中区获取 在 onWindowStageCreate写入这行代码即可MyPreferenceClass.context = this.context
- 
    在UI界面去拿 getContext(this)
 
- 
    
- 
  options是传递给preferences.getPreferencesSync()的配置对象,用于定义存储实例的仓库名称、安全模式等关键属性
  const store = preferences.getPreferencesSync(MyPreferenceClass.context||getContext(),{
       //拿到该名称的仓库,拿不到就会给你创建该名称的仓库,类似数据库
       name:'infoStore'
     })
    return store
3.创建增删改的方法
   //2.写入字段,持久化存储
  static async  putStore(info:string){
    const store = MyPreferenceClass.getStore()
    store.putSync('info',info)
   await store.flush()
  }
    //3.获取数据
  static getValue(){
    const store = MyPreferenceClass.getStore()
    const value = store.getSync('info','666666')
    return value
  }
  
    //4.删除数据
  static async deleteValue(){
    const store = MyPreferenceClass.getStore()
    //如果不加上flush操作,只是在内存中删除,需要加上flush操作才能写入磁盘!
   store.deleteSync('info')
    await store.flush()
  }
  //5.判断数据是否存在
  static judjeValue(val:string){
    const store = MyPreferenceClass.getStore()
   const value =  store.hasSync(val)
    return value
  }
4.测试代码
import { MyPreferenceClass } from './utils/MyPreferenceClass'
@Entry
@Component
struct Mytest {
    // @State 实时更新
  @State currentValue: string = '今天天气真不错!'
  @State JudeValue: boolean = false
  build() {
    //初始化默认值
    Column({ space: 10 }) {
      Text(this.currentValue)
      Text(this.JudeValue + '')
      Button('写入数据')
        .onClick(() => {
          MyPreferenceClass.putStore('今天天气并不好')
        })
      Button('展示数据')
        .onClick(() => {
          this.currentValue = MyPreferenceClass.getValue() as string
        })
      Button('删除数据')
        .onClick(() => {
          MyPreferenceClass.deleteValue()
        })
      Button('是否展示该数据')
        .onClick(() => {
          this.JudeValue = MyPreferenceClass.judjeValue('info')
        })
    }
    .height('100%')
    .width('100%')
  
}

- 0回答
- 1粉丝
- 0关注
- 鸿蒙用户首选项数据持久化
- 鸿蒙HarmonyOS首选项数据持久化存储详解
- harmony-utils之PreferencesUtil,首选项工具类
- harmony OS NEXT-双向数据绑定MVVM以及$$语法糖介绍
- harmony OS NEXT-启动页开发
- harmony OS NEXT-基本组件结构
- harmony OS NEXT-常用组件及其导航
- harmony OS NEXT-应用状态-AppStorage详细介绍
- harmony OS NEXT-评论功能小demo
- harmony OS NEXT-音频录制与播放模块
- harmony OS NEXT-基本介绍及DevcoStudiop基本使用
- harmony OS NEXT-设备开发中的核心概念
- (三四)HarmonyOS Design 的高级数据管理:状态管理框架与数据持久化
- 通过简单计算器熟悉栅格化布局
- HarmonyOS Next 之状态管理AppStorage和持久化存储详解与使用案例

