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','张三')
  }

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

相关推荐
YM52e37 分钟前
鸿蒙 ArkTS 实战|网络常用漫剧主角名称分类表:26 位主角 8 大分类 + 搜索筛选
学习·华为·harmonyos
小雨青年1 小时前
【HarmonyOS 7 悬浮页签深度实战】02 从普通底栏到第一个悬浮页签
华为·harmonyos
whyutianict_vv1 小时前
从零到上架6款APP:AI鸿蒙全栈智能体开发5个月实战复盘(ArkTS/DevEco/AGC全流程)
人工智能·个人开发·harmonyos
OH_TPC2 小时前
HarmonyOS APP开发---"启动秀"应用引导页App,需要用到这个库
harmonyos
见山是山-见水是水4 小时前
围绕HTTP 网络请求实战构建原生体验:设计取舍、实现与排错
网络·网络协议·http·华为·harmonyos
见山是山-见水是水4 小时前
拆解网络缓存策略设计:原生鸿蒙页面的实现路径与调试方法
http·缓存·华为·harmonyos
蓝速科技5 小时前
蓝速鸿蒙信创终端长效流畅性深度评测
arm开发·华为·harmonyos
YM52e5 小时前
鸿蒙 ArkTS 实战|万能绿茶通用词汇库:20 词六大类 + 搜索筛选 + 潜台词解析
学习·华为·harmonyos
2301_780356705 小时前
开源鸿蒙+智慧医疗:全视通如何实现门诊与住院场景的设备互联互通?
华为·开源·harmonyos
贾伟康5 小时前
【中国方言题库|13】HarmonyOS ArkTS 应用启动链路实战:从 EntryAbility 到首屏加载保持窗口与路由稳定
harmonyos·arkts·appstorage·应用启动·uiability