【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()

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
根据引用内容,在使用ArkTS开发HarmonyOS应用时,需要调用HTTP网络请求来获取数据并进行UI列表的刷新。根据官方文档提供的示例代码进行功能开发时,可能会遇到一些问题。其中一个常见的问题是,在封装HTTP请求的方法后,返回的数据总是为空,无法获取到调用接口的结果。 在解决这个问题之前,首先需要确保在配置文件module.json5中添加了ohos.permission.INTERNET权限,如引用所示。这是因为HTTP网络请求需要申请此权限才能正常工作。 另外,根据引用所示的异常描述,可能会遇到"org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing"异常。这个异常表示请求体缺失,可能是在封装HTTP请求方法时没有正确设置请求体。需要检查代码是否正确设置了请求体参数。 如果以上步骤都正确无误,但仍然无法获取到数据,可以进一步检查网络连接是否正常,以及接口是否正确返回数据。可以使用调试工具来查看请求和响应的具体信息,以便更好地定位问题。 总结起来,封装ArkTS的HTTP请求时,需要确保配置文件中添加了ohos.permission.INTERNET权限,并检查代码是否正确设置了请求体参数。如果仍然无法获取到数据,可以进一步检查网络连接和接口返回数据的情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【HarmonyOS】【ArkTS】如何使用HTTP网络请求获取动态数据刷新UI界面](https://blog.csdn.net/Mayism123/article/details/131082935)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Http请求异常Required request body is missing](https://blog.csdn.net/m0_37583655/article/details/130387221)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兵腾傲宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值