Harmony OS Next 开发【用户首选项 Preferences 封装】

鸿蒙Next(HarmonyOS NEXT)的用户首选项(Preferences)是为应用提供的一种轻量级数据持久化解决方案,它允许开发者以键值对的形式存储和检索数据。这种机制非常适合用于保存用户的个性化设置或应用的配置信息,例如主题颜色、字体大小、是否开启夜间模式等

特点

  1. 轻量级:用户首选项主要用于存储少量的数据,不适合用来存储大量的数据集。这是因为所有数据会被加载到内存中,过多的数据可能导致内存占用过高。建议分文件存储(如 uesrFile、configFile等)
  2. 快速访问:由于数据被缓存在内存中,因此读取速度非常快
  3. 同步与异步操作:提供了同步和异步两种方式来处理数据的读写操作
  4. 支持多种数据类型:键的类型为字符串型(不能重复),值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型(注: 这是一道鸿蒙基础认证考题)

Preferences 封装

import { preferences } from '@kit.ArkData'  
import { hilog } from '@kit.PerformanceAnalysisKit'  
import { BusinessError } from '@kit.BasicServicesKit';  
  
const TAG: string = 'PreferenceUtil'  
  
const CONFIG_FILE_NAME = 'configPreference'  // 文件名
const FONT_SIZE_KEY = 'font_size_key'  // key
const IS_FIRST_OPEN = 'is_first_open'  // key
  
class PreferenceUtil {  
  private _preference?: preferences.Preferences | undefined;  
  
  getPreferenceFile(context: Context, fileName: string) {  
    this._preference = preferences.getPreferencesSync(context, { name: fileName })  
    return this  
  }  
  // 获取首选项实例
  getConfigPreference(context: Context): PreferenceUtil {  
    return this.getPreferenceFile(context, CONFIG_FILE_NAME)  
  }  
  // 保存信息,传入key、value
  saveConfig(key: string, value: preferences.ValueType) {  
    this._preference?.putSync(key, value)  
    this._preference?.flush((err: BusinessError) => {  
      if (err) {  
        hilog.error(0x000, TAG, 'save config failed code =' + err.code + ', message =' + err.message)  
      } else hilog.info(0x000, TAG, 'save config success')  
    })  
  }  
  // 删除 key
  deleteKey(key: string) {  
    this._preference?.deleteSync(key)  
    this._preference?.flush((err: BusinessError) => {  
      if (err) {  
        hilog.error(0x000, TAG, 'delete config failed code =' + err.code + ', message =' + err.message)  
      } else hilog.info(0x000, TAG, 'delete config success')  
    })  
  }  
  // 清除首选项内容
  clearPreference() {  
    this._preference?.clearSync()  
    this._preference?.flush((err: BusinessError) => {  
      if (err) {  
        hilog.error(0x000, TAG, 'clear config failed code =' + err.code + ', message =' + err.message)  
      } else hilog.info(0x000, TAG, 'clear config success')  
    })  
  }  
  // T 泛型,返回该类型数据
  private getConfig<T>(name: string, defValue: preferences.ValueType): T {  
    return this._preference?.getSync(name, defValue) as T  
  }  
  
  getIsFirstOpen() {  
    return this.getConfig<boolean>(IS_FIRST_OPEN, false)  
  }  
  
  saveChangeFontSize(value: number) {  
    this.saveConfig(FONT_SIZE_KEY, value)  
  }  
  
  getChangeFontSize() {  
    return this.getConfig<number>(FONT_SIZE_KEY, 0)  
  }  
  
}  
  
export default new PreferenceUtil()

使用方式(示例)

在 aboutToAppear 中,取出对应字段

// 获取 字体大小 配置
aboutToAppear() {  
  let context = this.getUIContext().getHostContext()  
  if (context) {  
      PreferenceUtil.getConfigPreference(context)  
      this.fontSizeOffset = PreferenceUtil.getChangeFontSize()  
  }
}  

// ... 省略代码
// 保存 字体大小 配置
Button('确认')  
  .width('156vp')  
  .height('41vp')  
  .margin({right: '16vp'})  
  .onClick(() => {  
    PreferenceUtil.saveChangeFontSize(13)  
    this.fontSizeOffset = this.currentValue  
  })

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容