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

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

相关推荐
不爱吃糖的程序媛5 小时前
ArkUI-X 6.0.0 Release发布
华为·harmonyos
w139548564227 小时前
Flutter跨平台组件集成框架鸿蒙化使用指南
flutter·华为·harmonyos
叫我阿柒啊8 小时前
从Java全栈到前端框架:一场真实的技术面试对话
java·vue.js·spring boot·微服务·typescript·前端开发·后端开发
进击的前栈8 小时前
Flutter跨平台开发鸿蒙化HTTP解析工具包使用指南
flutter·http·harmonyos
进击的前栈10 小时前
Flutter跨平台开发鸿蒙化HTTP测试工具包使用指南
flutter·http·harmonyos
老前端的功夫13 小时前
TypeScript 类型守卫:从编译原理到高级模式
前端·javascript·架构·typescript
ttod_qzstudio13 小时前
备忘录之事件监听器绑定陷阱:为什么 .bind(this) 会移除失败?
javascript·typescript·内存泄漏·事件监听
花开彼岸天~15 小时前
Flutter跨平台开发鸿蒙化定位服务组件使用指南
flutter·开源·harmonyos
特立独行的猫a15 小时前
移植开源软件Notepad--(NDD)到鸿蒙PC:环境搭建与配置
notepad++·开源软件·harmonyos·鸿蒙pc·notpad--
鸿蒙开发工程师—阿辉16 小时前
HarmonyOS 上下文的使用: 脱离 UI 怎么用 Context?
ui·华为·harmonyos