HarmonyOS NEXT 用户首选项工具类封装

一、前言

HarmonyOS标准系统支持典型的存储数据形态,包括用户首选项、键值型数据库、关系型数据库。

  • 用户首选项(Preferences):通常用于保存应用的配置信息。数据通过文本的形式保存在设备中,应用使用过程中会将文本中的数据全量加载到内存中,所以访问速度快、效率高,但不适合需要存储大量数据的场景。

  • 键值型数据库(KV-Store):一种非关系型数据库,其数据以“键值”对的形式进行组织、索引和存储,其中“键”作为唯一标识符。适合很少数据关系和业务关系的业务数据存储,同时因其在分布式场景中降低了解决数据库版本兼容问题的复杂度,和数据同步过程中冲突解决的复杂度而被广泛使用。相比于关系型数据库,更容易做到跨设备跨版本兼容。

  • 关系型数据库(RelationalStore):一种关系型数据库,以行和列的形式存储数据,广泛用于应用中的关系型数据的处理,包括一系列的增、删、改、查等接口,开发者也可以运行自己定义的SQL语句来满足复杂业务场景的需要。

用户首选项类似于Android的Sp,用键值对的形式储存信息。

官网API

二、详细代码

import dataPreferences from '@ohos.data.preferences';
import preferences from '@ohos.data.preferences';
import { Log } from './Log';
import { ValueType } from '@kit.ArkData';

/**
 * 用户首选项工具类
 */
export class PreferencesUtil {
  static mPreferences ?: dataPreferences.Preferences

  /**
   * 初始化
   * @param context
   */
  static init(context: Context) {
    try {
      dataPreferences.getPreferences(context, 'Looper_Sp', (err, preferences) => {
        if (err) {
          Log.error(`Failed to get preferences. Code:${err.code},message:${err.message}`);
          return;
        }
        PreferencesUtil.mPreferences = preferences
        Log.info('Succeeded in getting preferences.');
        // 进行相关数据操作
      })
    } catch (err) {
      Log.error(`Failed to get preferences. Code:${err.code},message:${err.message}`);
    }
  }

  /**
   * 写数据
   * @param isFlush 是否持久化
   */
  static writeData(key: string, value: ValueType, isFlush: boolean): Promise<boolean> {
    return new Promise((resolve, reject) => {
      try {
        PreferencesUtil.mPreferences?.put(key, value, (err) => {
          if (err) {
            Log.error(`Failed to put data. Code:${err.code}, message:${err.message}`);
            reject(false);
            return;
          }
          Log.info('Succeeded in putting data.');
          if (isFlush) {
            PreferencesUtil.flushData()
          }
          resolve(true);
        })
      } catch (err) {
        Log.error(`Failed to check the key 'startup'. Code:${err.code}, message:${err.message}`);
        reject(false);
      }
    });
  }

  /**
   * 读取数据
   */
  static readData<D>(key: string): Promise<D> {
    return new Promise((resolve, reject) => {
      if (PreferencesUtil.mPreferences == null) {
        reject(new Error("mPreferences is null"));
      } else {
        PreferencesUtil.mPreferences.get(key, "", (err, value) => {
          if (err) {
            reject(err);
            return;
          }
          resolve(value as D);
        })
      }
    });
  }

  /**
   * 删除数据
   * @param isFlush 是否持久化
   */
  static delData(key: string, isFlush: boolean): Promise<string> {
    return new Promise((resolve, reject) => {
      if (PreferencesUtil.mPreferences == null) {
        reject(new Error("mPreferences is null"));
      } else {
        PreferencesUtil.mPreferences.delete(key, (err, value) => {
          if (err) {
            reject(err);
            return;
          }
          if (isFlush) {
            PreferencesUtil.flushData()
          }
          resolve("删除成功");
        })
      }
    });
  }

  /**
   * 删除整个库
   * @param isFlush 是否持久化
   */
  static delDB(context: Context, storeName: string): Promise<string> {
    return new Promise((resolve, reject) => {
      dataPreferences.deletePreferences(context, storeName, (err, value) => {
        if (err) {
          reject(err);
          return;
        }
        resolve("删除成功");
      })
    });
  }

  /**
   * 持久化
   */
  static flushData() {
    if (PreferencesUtil.mPreferences != null) {
      try {
        PreferencesUtil.mPreferences.flush((err) => {
          if (err) {
            Log.error(`Failed to flush. Code:${err.code}, message:${err.message}`);
            return;
          }
          Log.info('Succeeded in flushing.');
        })
      } catch (err) {
        Log.error(`Failed to flush. Code:${err.code}, message:${err.message}`);
      }
    }
  }
}

let preferencesUtil = new PreferencesUtil()

export default preferencesUtil as PreferencesUtil

三、使用

1.在EntryAbility的onWindowStageCreate中调用初始化

//sp储存初始化
PreferencesUtil.init(this.context)

2.写入信息

PreferencesUtil.writeData("zzz", "bbb", true)

3.读取信息

 PreferencesUtil.readData<string>("zzz").then(res => {
      Log.info("读取数据:" + res)
    })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值