当前位置:   article > 正文

【鸿蒙应用ArkTS开发系列】- 轻量级缓存框架Preferences使用_鸿蒙 preferences

鸿蒙 preferences

一、介绍

Preferences 首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。

数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。具体参考官网

二、使用

1、导入模块

    import DataPreferences from '@ohos.data.preferences';
  • 1

2、获取实例

let preferences = DataPreferences.getPreferences(context, name);
preferences .then((res) => {
          //res 就是返回的实例
        })
        .catch(reason => {
          Logger.error(this.TAG, '获取Preferences实例失败');
        })
    });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

getPreferences 方法是一个异步调用过程,返回的是Promise对象,实际需要使用then语句进行回调处理,入参context是上下文环境,name是配置文件的名称

3、写入数据

let preferences = DataPreferences.getPreferences(this.context, name);
    preferences.then((res) => {
      res.put(IS_PRIVACY, true).then(() => {
        res.flush();
        Logger.info('PutData','isPrivacy is put success');
      }).catch((err) => {
        Logger.info('PutData','isPrivacy put failed. Cause:' + err);
      });
    })
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在获取到实例后,使用put方法进行数据写入,这里写入一个boolean 值,key名称为IS_PRIVACY,put完成后,需要调用flush方法,将数据实际的写入到文件中。

4、读取数据

let preferences = DataPreferences.getPreferences(this.context, name);
preferences.then((res) => {
  res.get(IS_PRIVACY, false).then((isPrivate) => {
    Logger.info('GetData','isPrivacy is get success, isPrivate:' + isPrivate);
  });
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

三、简单封装

1、封装

实际项目使用中,每次需要导入**@ohos.data.preferences**模块,获取实例,判断实例获取成功后,再进行数据的写入或者读取,这样稍微繁琐了点,这里对preferences 进行一个简单的封装,也方便管理preferences,后续替换底层实现也会少一些工作投入。

这里我们定义一个工具类 PreferencesUtils.ts,

/**
 * 轻量级缓存工具类
 */
 
import DataPreferences from '@ohos.data.preferences';
import { Logger } from './log/Logger';
 
 
export class PreferencesUtils {
  private static readonly TAG = 'PreferencesUtils';
 
  private constructor() {
  }
 
  /**
   * 封装一层,增加获取失败的日志输出
   * @param context
   * @param name
   */
  public static  getPreferences(context: Context, name: string): Promise<DataPreferences.Preferences> {
 
    return new Promise<DataPreferences.Preferences>((resolved,rejected) => {
      DataPreferences.getPreferences(context, name)
        .then((res) => {
          resolved(res);
        })
        .catch(reason => {
          Logger.error(this.TAG, '获取Preferences实例失败');
          rejected(reason);
        })
    });
 
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

封装了获取实例的方法,增加了获取失败的日志统一输出,其他的写入,读取方法也可以这里定义方法封装,这里就不多讲了,直接使用即可。

2、封装使用

import { PreferencesUtils } from '@ohos/xxxLibrary/src/main/ets/common/utils/PreferencesUtils'
 
 
@Entry
@Component
struct DemoPage {
  @State message: string = 'Hello World'
  context = getContext(this) as common.UIAbilityContext
 
  build() {
    ...
  }
 
  aboutToAppear() {
    PreferencesUtils
      .getPreferences(this.context, 'store')
      .then((preferences) => {
        preferences.get('key_is_privacy', false).then((isPrivacy) => {
          //...
      });
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

3、异步转同步调用

上述方法使用的是异步获取的方式,如果需要同步获取,可以使用await关键字将Promise转成同步,使用async配合修饰方法搭配使用。

具体如下:

import { PreferencesUtils } from '@ohos/xxxLibrary/src/main/ets/common/utils/PreferencesUtils'
 
 
@Entry
@Component
struct DemoPage {
  @State message: string = 'Hello World'
  context = getContext(this) as common.UIAbilityContext
 
  build() {
    ...
  }
 
  async aboutToAppear() {
     
    try {
 
      let preferences = await PreferencesUtils.getPreferences(this.context, 'store');
      if (preferences) {
        let value = await preferences.get('key_is_privacy', false);
        Logger.info('GetData', 'value:' + value);
      }
 
    } catch (error) {
      console.log('error=' + error);
    }
  }
 
  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

本文到此完结,有疑问评论区沟通探讨,谢谢阅读。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/92105
推荐阅读
相关标签
  

闽ICP备14008679号