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

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

工具类源码如下:

TypeScript 复制代码
import preferences from '@ohos.data.preferences'
/**
 * @auther:jsxin
 * email:[email protected]
 * 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','张三')
  }

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

相关推荐
颜颜yan_8 分钟前
【HarmonyOS5】UIAbility组件生命周期详解:从创建到销毁的全景解析
架构·harmonyos·鸿蒙·鸿蒙系统
狂炫一碗大米饭40 分钟前
如何在 TypeScript 中使用类型保护
typescript
龙儿筝4 小时前
ArkUI-X与Android桥接通信之消息通信
harmonyos
陈奕昆4 小时前
5.1 HarmonyOS NEXT系统级性能调优:内核调度、I/O优化与多线程管理实战
华为·harmonyos
码农之王6 小时前
(一)TypeScript概述和环境搭建
前端·后端·typescript
libo_20256 小时前
HarmonyOS5 全球化运营:使用AGC的本地化工具适配30+国家/地区
harmonyos
程序员小刘6 小时前
如何优化React Native应用以适配HarmonyOS5?
javascript·react native·react.js·华为·harmonyos
程序员小刘7 小时前
【HarmonyOS 5】拍摄美化开发实践介绍以及详细案例
华为·harmonyos
王二蛋与他的张大花7 小时前
HarmonyOS运动开发:打造你的专属运动节拍器
harmonyos
HarmonyOS_SDK8 小时前
钉钉携手鸿蒙扫一扫,打造高效办公新体验
harmonyos