【HarmonyOS开发】ArkTs首选项数据存储封装

图片

用户首选项(Preferences):以文本的形式保存数据,使用时数据会加载到内存中,范围速度快,效率高,但是不适合存储大量数据。

通过Preferences 提供接口,将持久化文件加载Preferences实例中,每一个文件对应一个Preferences 实例,系统会将Preferences实例存储在内存中,达到快速,高效访问的效果。

1、效果预览


2、首选项使用条件

  • 键必须为string 类型,不能为空并且长度小于80个字节。

  • 值(Value)为string 类型时,可以为空,最大限制为 8192个字节。

  • 存储数据不要超过1万条,否则会造成内存较大开销。

3、核心API

  • get(获取)

  • has(判断是否存在)

  • put(写入)

  • delete(时删除)

  • flush(持久化到文件)

  • on(订阅数据变更)

  • off(取消订阅)

4、封装为类方法


import preferences from '@ohos.data.preferences';

const STORE_NAME = "baseInfo"

let context = getContext(this)
let preference: preferences.Preferences

class PreferenceUtil {
  // 初始化对象
  async getPreferences() {
    try {
      preference = await preferences.getPreferences(context, STORE_NAME)
    }
    catch (err) {
      console.error(`error:${err}`)
    }
  }

   /**
    * 删除所有的preferences对象
    */
  async deletePreferences() {
    try {
      await preferences.deletePreferences(context, STORE_NAME);
    } catch(err) {
      console.error('TAG', `Failed to delete preferences, Cause: ${err}`);
    };
  }

  // 写入preference数据
  async putPreference(key: string, value: string) {
    if (!key || !value) {
      return
    }

    if (!preference) {
      await this.getPreferences();
    }
    // 将数据保存到首选项,内存中
    try {
      await preference.put(key, value);
    } catch (err) {
      console.error('TAG', `Failed to put value, Cause: ${err}`);
    }
    // 【数据持久化,写入文件】Store the Preference instance in the preference persistence file
    await preference.flush();
  }

  /**
   * 获取preference对象
   */
  async getPreference(key: string) {
    if (!key) {
      return
    }

    let value: number | string | boolean | Array<number> | Array<string> | Array<boolean>;
    if (!preference) {
      await this.getPreferences();
    }
    try {
      value = await preference.get(key, '')
    } catch (err) {
      console.error('TAG', `Failed to get value, Cause: ${err}`)
    }

    if (value === '') {
      return
    }

    return value;
  }
}

export default new PreferenceUtil();

5、使用封装的方法


import userInfoStrong from '../../utils/preferencesStrong'

this.userInfo = {
  name: this.nickname,
  sex: this.sex,
  sign: this.signature,
  date: this.birthdate,
  hobbies: this.hobbies,
}

// 保存数据
userInfoStrong.putPreference('userInfo', JSON.stringify(this.userInfo))

// 异步获取保存的数据
userInfoStrong.getPreference('userInfo').then((res) => {
  this.userInfo = res && JSON.parse(res) as userInfoType
  
  const { name, sex, sign, date, hobbies } = this.userInfo;

  this.nickname = name;
  this.sex = sex;
  this.signature = sign;
  this.birthdate = date;
  this.hobbies = hobbies;
})

// 清除所有的数据
userInfoStrong.deletePreferences()

猜你喜欢

转载自blog.csdn.net/qq_23334071/article/details/135102505
今日推荐