HarmonyOS开发之数据存储—首选项数据存储

数据存储

首选项数据存储

​ 用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。当用户希望有一个全局唯一存储的地方,可以采用用户首选项来进行存储。Preferences会将该数据缓存在内存中,当用户读取的时候,能够快速从内存中获取数据,当需要持久化时可以使用flush接口将内存中的数据写入持久化文件中。Preferences会随着存放的数据量越多而导致应用占用的内存越大,因此,Preferences不适合存放过多的数据,也不支持通过配置加密,适用的场景一般为应用保存用户的个性化设置(字体大小,是否开启夜间模式)等。

​ 数据最终存储在系统文件中,提供对底层文件的封装,将其映射成Preferences实例对象

在这里插入图片描述

可使用回调方式与Promise方式获取Preferences实例

导入模块:

import { preferences } from '@kit.ArkData';

let preference: Promise<preferences.Preferences> =
preferences.getPreferences(context, PREFERENCES_NAME)

以下提供一种基于Promise的存储实例

1.声明全局对象,提供Map集合存放获取Preferences实例的函数与存入的键值对数据:

export class GlobalContext{
  private constructor() {
  }
  private static instance:GlobalContext
  private tool_map= new Map<string,Object>()

  public static getContext(){
    if(!GlobalContext.instance){
      GlobalContext.instance=new GlobalContext()
    }
    return GlobalContext.instance
  }

  getValue(value:string){
    return this.tool_map.get(value)
  }

  setMap(key:string,value:Object){
    this.tool_map.set(key,value)
  }
}

2.定义工具类,存放创建实例的方法以及增删取的方法

import { preferences } from '@kit.ArkData';
import { GlobalContext } from './GlobalContext';
import { Context } from '@ohos.abilityAccessCtrl';
import Logger from './Logger';

const TAG = '[PreferencesUtil]';
const PREFERENCES_NAME = 'myPreferences';
const KEY_APP_FONT_SIZE = 'appFontSize';

export class PrefUtil {
  //在EntryAbility中使用this.context 创建一个获取Preference对象的函数fontPreferences()
  createFontPreferences(context: Context) {
    let fontPreferences: Function = (() => {
      let preference: Promise<preferences.Preferences> = preferences.getPreferences(context, PREFERENCES_NAME)
      return preference
    })
  //保存在全局唯一的单例对象GlobalContext的_objects Map中,键为PREFERENCES_NAME,值为刚刚创建的函数
    GlobalContext.getContext().setMap(PREFERENCES_NAME, fontPreferences)
  }

  saveChangeFontSize(fontSize: number) {
  //获取createFontPreferences中创建好的返回Promise的fontPreferences()函数,并将值赋给getFontPreferences
    let getFontPreferences: Function = GlobalContext.getContext().getValue(PREFERENCES_NAME) as Function
    getFontPreferences().then(async (preferences: preferences.Preferences) => {
      await preferences.put(KEY_APP_FONT_SIZE, fontSize)
      preferences.flush()
    }).catch((err: Error) => {
      Logger.error(TAG, 'put the preferences failed, err: ' + err);

    });
  }

  async getChangeFontSize():Promise<number> {
      let fontSize: number = 0;
      let getFontPreferences: Function = GlobalContext.getContext().getValue(PREFERENCES_NAME) as Function
      fontSize = await (await getFontPreferences()).get(KEY_APP_FONT_SIZE, fontSize)
      return fontSize
  }

  async deleteChangeFontSize(){
    let getFontPreferences=GlobalContext.getContext().getValue(PREFERENCES_NAME) as Function
    const preference:preferences.Preferences=await getFontPreferences()
    //await preference.delete(KEY_APP_FONT_SIZE)
    let deleteValue=preference.delete(KEY_APP_FONT_SIZE)
    deleteValue.then(()=>{
      Logger.info(TAG, 'Succeeded in deleting the key appFontSize.');
    }).catch((err:Error)=>{
      Logger.error(TAG, 'Failed to delete the key appFontSize. Cause: ' + err);
    })
  }

}
export default new PrefUtil()

3.在UIAbility中使用全局对象以及获取的上下文this.context创建Preferences实例

onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
    PrefUtil.createFontPreferences(this.context)
  }

4.页面中使用生命周期方法onPageShow()取出存储的信息

onPageShow(){
    PrefUtil.getChangeFontSize().then((value:number) => {
      this.saveSize = value;
      Logger.info(TAG, 'Get the value of changeFontSize: ' + this.saveSize);
    })
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值