日常开发事项-本地数据保存工具类PreferenceUtil

1、PreferenceUtil

import { preferences } from '@kit.ArkData'
import { JSONUtil } from '@pura/harmony-utils'
import { UserModel } from '../mvi/data/UserModel'
import { Constants } from './Constants'


/**
 * @author J.query
 * @date 2024/10/12 8:48
 * @email j-query@foxmail.com
 * Description:
 */

class PreferenceUtil {
  // 首选项实例
  private pref: preferences.Preferences | null = null

  /*
    * 初始化preferences实例
    * @context  应用上下文
   */
  async loadPreference(context: Context) {
    try {
      this.pref = await preferences.getPreferences(context, Constants.SPSETCOOKIE)
      console.log(`preferences[${Constants.SPSETCOOKIE}]初始化成功`)
    } catch (err) {
      console.error(`preferences[${Constants.SPSETCOOKIE}]初始化失败`)
      console.error('err: ', JSON.stringify(err))
    }
  }

  /*
    * 销毁preferences实例 - 缓存、持久化文件一并销毁
    * @context  应用上下文
   */
  async delPreference(context: Context) {
    try {
      await preferences.deletePreferences(context, Constants.SPSETCOOKIE)
      console.log(`preferences[${Constants.SPSETCOOKIE}]销毁成功`)
    } catch (err) {
      console.error(`preferences[${Constants.SPSETCOOKIE}]销毁失败`)
      console.error('err: ', JSON.stringify(err))
    }
  }

  /*
    * 从preferences实例中获取键对应的值
    * @key            健
    * @defaultValue   获取失败时,返回的值
   */
  async getPreferenceValue(key: string, defaultValue: preferences.ValueType): Promise<preferences.ValueType> {

    let value: preferences.ValueType = defaultValue

    // 获取对应的值之前,先判断preferences是否初始化完成
    if (!this.pref) {
      console.error(`preferences[${Constants.SPSETCOOKIE}]尚未初始化!`)
      return value
    }

    try {
      value = await this.pref.get(key, defaultValue)
      console.log(`读取preferences[${key} = ${value}]成功`)
    } catch (err) {
      console.error(`读取preferences[${key}]失败 `, JSON.stringify(err))
    }

    return value
  }
  /**
   * 保存用户信息
   * @param mUserModel
   * @param isSave
   */

  saveUser(mUserModel: UserModel, isSave: boolean) {
    if (mUserModel && isSave) {
      this.pref?.putSync(Constants.KEY_USER_INFO, JSON.stringify(mUserModel, undefined, undefined));
    } else {
      this.pref?.deleteSync(Constants.KEY_USER_INFO);
    }
    this.pref?.flush();
  }

  // @State myUser: UserModel = null

  getUser(): UserModel | undefined {
    try {
      if (!this.pref) {
        return undefined;
      }
      let  json = this.pref.getSync(Constants.KEY_USER_INFO, "");
      if (json === null || json === undefined) {
        return undefined;
      }
      // 尝试将 json 转换为 UserModel
     // const user: UserModel = json as UserModel;
      const user = JSON.parse(json.toString()) as UserModel;

      // const user = JSONUtil.jsonToBean(UserModel, json);
      // 额外检查 user 是否符合 UserModel 的结构
      if (typeof user !== 'object' || user === null) {
        return undefined;
      }
      return user;
    } catch (error) {
      console.error('Error in getUser:', error);
      return undefined;
    }
  }

  /**
   * 保存记住密码状态
   * @param isSave
   * @returns
   */
  setRememberPswStatusToFile(isSave: boolean) {
    return this.pref?.putSync(Constants.SpRememberPswStatus, isSave)
  }

  /**
   * 获取记住密码状态
   * @return Boolean
   */
  getRememberPswStatusToFile(): boolean {
    return this.pref?.getSync(Constants.SpRememberPswStatus, []) as boolean
  }

  /*
  * 从Preferences实例中写入数据
  * @key        健
  * @value      值
 */
  async putPreferenceValue(key: string, value: preferences.ValueType) {

    // 写入数据之前,先判断preferences是否初始化完成
    if (!this.pref) {
      console.error(`preferences[${Constants.SPSETCOOKIE}]尚未初始化!`)
      return
    }

    try {
      await this.pref.put(key, value)
      // 持久化
      await this.pref.flush()
      console.log(`保存preferences[${key} = ${value}]成功`)
    } catch (err) {
      console.error(`保存preferences[${key} = ${value}]失败`, JSON.stringify(err))
    }

  }
  /**
   * 保存用户信息
   * @param user
   */
  putUser(user?: UserModel) {
    if (user) {
      this.pref?.putSync(Constants.KEY_USER_INFO, JSON.stringify(user, undefined, undefined));
    } else {
      this.pref?.deleteSync(Constants.KEY_USER_INFO);
    }
    this.pref?.flush();
  }
/**
 * 获取搜索历史
 * @returns
 */
  getSearchHistory(): string[] {
    return this.pref?.getSync(Constants.KEY_SEARCH_HISTORY, []) as string[];
  }
/**
 * 保存搜索历史
 * @param historyKeys
 */
  putSearchHistory(historyKeys: string[]) {
    this.pref?.putSync(Constants.KEY_SEARCH_HISTORY, historyKeys)
    this.pref?.flush()
  }
}

2、使用示例


const preferenceUtil = new PreferenceUtil()

export default preferenceUtil as PreferenceUtil

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值