Preferences首选项存储工具类(Harmony OS)

前言:公司最近Android项目趋于运维状态,目前在跟架构组一起封装鸿蒙框架。今天先把首选项存储工具类整理出来,后续鸿蒙工具类在做补充。废话不多说上源码!!!

工具类源码如下:

TypeScript 复制代码
import preferences from '@ohos.data.preferences'
/**
 * @auther:jsxin
 * email:jsxin0816@163.com
 * date: 2024/8/9
 * desc: 首选项存储:key-value键值对增删改查
 */
class PreferencesUtils {
  private preferences?: preferences.Preferences
  /**
   * 初始化Preferences对象(同步写法async/await)
   * @param context 上线文
   * @param preferenceName 首选项文件名称
   */
  async initPreferences(context, preferencesName: string = 'preferences_data_store') {
    console.debug('initPreferences() preferenceName = ' + preferencesName)
    try {
      this.preferences = await preferences.getPreferences(context, preferencesName)
    } catch (err) {
      console.debug('initPreferences() err.code = ' + err.code + '  err.message = ' + err.message)
    }
  }

  /**
   * 保存数据:key value键值对
   * @param key 键
   * @returns value 值
   */
  async putValue(key: string, value: preferences.ValueType) {
    if (!this.preferences) {
      console.debug('Preferences--->>>[putValue] Preferences实例为空')
      return
    }
    try {
      await this.preferences.put(key, value)
      await this.preferences.flush()
    } catch (err) {
      console.debug('Preferences--->>>[putValue]:err.code = ' + err.code + 'err.message = ' + err.message)
    }
  }

  /**
   * 根据key获得value
   * @param key 键
   * @returns value 值
   */
  async getValue(key: string, defaultValue: preferences.ValueType = '') {
    if (!this.preferences) {
      console.debug('Preferences--->>>[getValue] Preferences实例为空')
      return
    }
    //在typescript中,空字符串、数字0、null、undefined都被认为是false,其他值为true
    if (!key) {
      return defaultValue
    }
    try {
      return await this.preferences.get(key, defaultValue)
    } catch (err) {
      console.debug('Preferences--->>>[getValue]:err.code = ' + err.code + 'err.message = ' + err.message)
    }
  }

  /**
   * 保存数据:key value键值对集合(多数据集合存储)
   * @param valueMap 数据集合
   */
  async putValueByMap(valueMap: Map<string, preferences.ValueType>) {
    if (!this.preferences) {
      console.debug('Preferences--->>>[putValueByMap] Preferences实例为空')
      return
    }
    if (!valueMap || valueMap.size === 0) {
      console.debug('Preferences--->>>[putValueByMap]:传入集合数据为空或未初始化')
      return
    }
    try {
      for (const entry of valueMap.entries()) {
        const key = entry[0]
        const value = entry[1]
        await this.preferences.put(key, value)
      }
      this.preferences.flush()
    } catch (err) {
      console.debug('Preferences--->>>[putValueByMap]:err.code = ' + err.code + 'err.message = ' + err.message)
    }
  }

  /**
   * 根据key删除value
   * @param key key
   */
  async deleteByKey(key: string) {
    if (!this.preferences) {
      console.debug('Preferences--->>>[deleteByKey] Preferences实例为空')
      return
    }
    try {
      await this.preferences.delete(key)
      await this.preferences.flush()
    } catch (err) {
      console.debug('Preferences--->>>[deleteByKey]:err.code = ' + err.code + 'err.message = ' + err.message)
    }
  }

  /**
   * 清空全部数据
   */
  async deleteAllDatas() {
    if (!this.preferences) {
      console.debug('Preferences--->>>[deleteAllDatas] Preferences实例为空')
      return
    }
    try {
      await this.preferences.clear()
      await this.preferences.flush()
    } catch (err) {
      console.debug('Preferences--->>>[deleteAllDatas]:err.code = ' + err.code + 'err.message = ' + err.message)
    }
  }
}

const preferencesUtils = new PreferencesUtils()

export default preferencesUtils as PreferencesUtils

用法:

1、推荐在EntryAbility中进行初始化,如下:

TypeScript 复制代码
//1、导入依赖
import PreferencesUtils from '../store/PreferencesUtils'

export default class EntryAbility extends UIAbility {
   onCreate(want, launchParam) {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
    //2、全局初始化Preferences
    PreferencesUtils.initPreferences(this.context.getApplicationContext())
  }

2、在使用的界面进行引入,如下:

TypeScript 复制代码
//1、包导入
import PreferencesUtils  from '../store/PreferencesUtils'
@Entry
@Component
struct Index {

  aboutToAppear(){
    //2、使用
    PreferencesUtils.putValue('name','张三')
  }

如有问题或建议欢迎指正!

相关推荐
熊猫钓鱼>_>30 分钟前
ArkTS 装饰器总览:V1 / V2 / 通用装饰器完整学习笔记
笔记·学习·华为·交互·harmonyos·arkts·arkweb
周倦岚1 小时前
ArkTS中的MVC、MVP、MVVM
华为·mvc·harmonyos
特立独行的猫A2 小时前
Node.js 三方库移植到 OpenHarmony 鸿蒙PC:一篇实操指南
harmonyos
达子6662 小时前
第16章_HarmonyOs开发图解之 音频
华为·音视频·harmonyos
程序员黑豆3 小时前
鸿蒙应用开发之双向绑定实战:从 V1 到 V2 的完整迁移指南
前端·harmonyos
JoyCong19985 小时前
ToDesk鸿蒙移动端更新!四大变化,触控交互深度进化
macos·华为·智能手机·harmonyos·远程工作·远程操作
molihuan5 小时前
最新 spine 4.3 flutter 适配鸿蒙
flutter·动画·harmonyos·鸿蒙·spine
qizayaoshuap5 小时前
# 鸿蒙 HarmonyOS 应用开发实战(第33期)|喝水提醒(Water Reminder)— 可视化水杯与进度动画
华为·harmonyos
程序员黑豆6 小时前
鸿蒙应用开发之父子组件传参:@Param、@Event、@Once 装饰器详解与实战
前端·harmonyos
FF2501_940228587 小时前
HarmonyOS应用开发实战:猫猫大作战-AVPlayer 音视频播放
harmonyos·鸿蒙