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

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

相关推荐
We་ct31 分钟前
LeetCode 211. 添加与搜索单词 - 数据结构设计:字典树+DFS解法详解
开发语言·前端·数据结构·算法·leetcode·typescript·深度优先
zhensherlock1 小时前
Protocol Launcher 系列:一键唤起 VSCodium 智能 IDE
javascript·ide·vscode·typescript·开源·编辑器·github
●VON2 小时前
【鸿蒙PC】在 HarmonyOS 上跑 Electron?手把手教你搞定桌面欢迎页!(Mac版)
开发语言·macos·华为·electron·电脑·harmonyos
阿懂在掘金2 小时前
Vue Asyncx 库三周年,回顾起源时的三十行代码
前端·typescript·开源
前端不太难3 小时前
一个真实鸿蒙 App 的工程目录结构
华为·状态模式·harmonyos
We་ct3 小时前
LeetCode 46. 全排列:深度解析+代码拆解
前端·数据结构·算法·leetcode·typescript·深度优先·回溯
猫头虎-前端技术3 小时前
这个项目需要Node 16,那个项目需要Node 18:如何解决多项目Node.js版本管理问题
前端·javascript·chrome·typescript·node.js·json·firefox
枫叶丹43 小时前
【HarmonyOS 6.0】聚合链接(App Linking)实战:从创建配置到应用跳转
开发语言·华为·harmonyos
alice--小文子3 小时前
鸿蒙(HarmonyOS)-怎么在电脑端给鸿蒙真机安装.hap包
华为·harmonyos
Swift社区3 小时前
鸿蒙 ArkUI 项目为什么容易变成“巨型页面文件”?
华为·harmonyos