HarmonyOS使用本地存储dataPreferences

在HarmonyOS中使用类似与浏览器的localStorage.

官方链接:文档中心

1、封装

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

let context = getContext(this);
let preference: dataPreferences.Preferences;
let preferenceTemp: dataPreferences.Preferences;

/**
 * Preference model.
 *
 * @param fruitData Fruit data.
 */
class PreferenceModel {
  /**
   * Read the specified Preferences persistence file and load the data into the Preferences instance.
   */
  async getPreferencesFromStorage(db_name: string) {
    try {
      preference = await dataPreferences.getPreferences(context, db_name);
    } catch (err) {
    }
  }

  /**
   * 删除本地存储
   * Deletes the specified Preferences persistence file from memory and removes the Preferences instance.
   */
  async deletePreferences(db_name: string) {
    try {
      await dataPreferences.deletePreferences(context, db_name);
    } catch(err) {
    };
    preference = preferenceTemp;
  }

  /**
   * Save the data to the Preferences.
   * 持久化存储
   * @param fruit Fruit data.
   */
  async putPreference(data: any, db_name: string, key: string) {
    if (!preference) {
      await this.getPreferencesFromStorage(db_name);
    }
    // The fruit name and fruit quantity data entered by the user are saved to the cached Preference instance.
    try {
      if (typeof data === 'object' && data !== null) {
        await preference.put(key, JSON.stringify(data));
      } else {
        await preference.put(key, data);
      }
    } catch (err) {
    }
    await preference.flush();
  }

  /**
   * 取数据
   * Get preference data.
   */
  async getPreference(db_name: string, key: string) {
    let storage;
    if (!preference) {
      await this.getPreferencesFromStorage(db_name);
    }
    try {
      storage = (await preference.get(key, ''));
    } catch (err) {
    }
    // If the data is empty, a message is displayed indicating that data needs to be written.
    if (!storage) {
      return '';
    }
    return storage;
  }

  /**
   * write data.
   * 存数据
   * @param fruit  Fruit data.
   */
  writeData(data: any, db_name: string, key: string) {
    // The data is inserted into the preferences database if it is not empty.
    this.putPreference(data, db_name, key);
    console.log(`${db_name}-${key}---writeData成功`)
  }

  /**
   * Process the data obtained from the database.
   */
  async getData(db_name: string, key: string) {
    return await this.getPreference(db_name, key);
  }

  /**
   * Popup window prompt message.
   *
   * @param message Prompt message.
   */
  showToastMessage(message: Resource) {
    promptAction.showToast({
      message: message,
      duration: 3000
    });
  };
}

export default new PreferenceModel();

2、存数据

import PreferenceModel from '../mode/PreferenceModel';
PreferenceModel.writeData('存入的数据', 'userInfo', 'user')

3、取数据

import PreferenceModel from '../mode/PreferenceModel';
const user  = await PreferenceModel.getPreference('userInfo', 'user')

注意事项:

官方说的:数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。

如果你存的是对象,那么会自动转换为json字符串。所以在用的时候,需要JSON.parse()

上一章: HarmonyOS实现Tabs-优快云博客

下一章: HarmonyOS自定义标题栏-优快云博客

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

多喜乐 长安宁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值