Ark TS 用户首选项Preferences实现数据持久化 您所在的位置:网站首页 prmac首选项 Ark TS 用户首选项Preferences实现数据持久化

Ark TS 用户首选项Preferences实现数据持久化

2024-07-06 16:58| 来源: 网络整理| 查看: 265

一、运作机制

二、约束限制

Key键为string类型,要求非空且长度不超过80个字节。

如果Value值为string类型,请使用UTF-8编码格式,可以为空,不为空时长度不超过8192个字节。

内存会随着存储数据量的增大而增大,所以存储的数据量应该是轻量级的,建议存储的数据不超过一万条,否则会在内存方面产生较大的开销。

三、接口说明

 四、使用尝试

为了更优雅的使用Preferences,我们可以用class定义一个类之后,再去使用

首先在目录common-PreferencesUtil中新建PreferencesUtil.ts

1、定义class

引入Preferences,通过Map来实现多个Preferences场景,内部定义增删改查方法,完成后导出

import preferences from '@ohos.data.preferences'; class PreferencesUtils { prefMap: Map = new Map() // 加载数据load loadPrefenence(context, name: string) {} // 新增数据put putPreferenceValue(name: string, key: string, value: preferences.ValueType) {} // 读取数据get getPreferenceValue(name: string, key: string, defaultValue: preferences.ValueType) {} // 删除数据del delPreferenceValue(name: string,key: string) {} } const preferenceUtils = new PreferencesUtils() export default preferenceUtils as PreferencesUtils 2、完善方法

加载数据

传入上下文context,以及自定义的Preferences名称

// 加载数据load async loadPrefenence(context, name: string) { try { const pref = await preferences.getPreferences(context, name) this.prefMap.set(name, pref) console.log('testTag', `加载preferences[${name}]成功`) } catch (e) { console.log('testTag', `加载preferences[${name}]失败`, JSON.stringify(e)); } }

新增数据

传入自定义的Preferences名称,需要存储的key-value键值对

put方法在调用的时候,若key已存在则会覆盖原有数据

注意:新增的数据必须调用flush方法,刷盘后,才能实现持久化

// 新增数据put async putPreferenceValue(name: string, key: string, value: preferences.ValueType) { // 先判断是否存在该名称的键值对 if (!this.prefMap.has(name)) { console.log('testTag', `preferences[${name}]尚未初始化`); return } try { const pref = this.prefMap.get(name) // 写入数据 await pref.put(key, value) // 刷盘 await pref.flush() console.log('testTag', `保存preferences[${name}]成功`) } catch (e) { console.log('testTag', `保存preferences[${name}]失败`, JSON.stringify(e)); } }

读取数据

传入自定义的Preferences名称,需要读取的key,若首次读取时没有改数据,则给默认数据defaultValue

// 读取数据get async getPreferenceValue(name: string, key: string, defaultValue: preferences.ValueType) { // 先判断是否存在该名称的键值对 if (!this.prefMap.has(name)) { console.log('testTag', `preferences[${name}]尚未初始化`); return } try { const pref = this.prefMap.get(name) const value = await pref.get(key, defaultValue) console.log('testTag', `读取preferences[${name}.${key}=${value}]成功`) return value } catch (e) { console.log('testTag', `读取preferences[${name}]失败`, JSON.stringify(e)); } }

删除数据

传入自定义的Preferences名称,需要删除的key

// 删除数据del async delPreferenceValue(name: string,key: string) { // 先判断是否存在该名称的键值对 if (!this.prefMap.has(name)) { console.log('testTag', `preferences[${name}]尚未初始化`); return } try { const pref = this.prefMap.get(name) await pref.delete(key) console.log('testTag', `删除preferences[${name}]成功`) } catch (e) { console.log('testTag', `删除preferences[${name}]失败`, JSON.stringify(e)); } }

完成代码如下

import preferences from '@ohos.data.preferences'; class PreferencesUtils { prefMap: Map = new Map() // 加载数据load async loadPrefenence(context, name: string) { try { const pref = await preferences.getPreferences(context, name) this.prefMap.set(name, pref) console.log('testTag', `加载preferences[${name}]成功`) } catch (e) { console.log('testTag', `加载preferences[${name}]失败`, JSON.stringify(e)); } } // 新增数据put async putPreferenceValue(name: string, key: string, value: preferences.ValueType) { // 先判断是否存在该名称的键值对 if (!this.prefMap.has(name)) { console.log('testTag', `preferences[${name}]尚未初始化`); return } try { const pref = this.prefMap.get(name) // 写入数据 await pref.put(key, value) // 刷盘 await pref.flush() console.log('testTag', `保存preferences[${name}]成功`) } catch (e) { console.log('testTag', `保存preferences[${name}]失败`, JSON.stringify(e)); } } // 读取数据get async getPreferenceValue(name: string, key: string, defaultValue: preferences.ValueType) { // 先判断是否存在该名称的键值对 if (!this.prefMap.has(name)) { console.log('testTag', `preferences[${name}]尚未初始化`); return } try { const pref = this.prefMap.get(name) const value = await pref.get(key, defaultValue) console.log('testTag', `读取preferences[${name}.${key}=${value}]成功`) return value } catch (e) { console.log('testTag', `读取preferences[${name}]失败`, JSON.stringify(e)); } } // 删除数据del async delPreferenceValue(name: string, key: string) { // 先判断是否存在该名称的键值对 if (!this.prefMap.has(name)) { console.log('testTag', `preferences[${name}]尚未初始化`); return } try { const pref = this.prefMap.get(name) await pref.delete(key) console.log('testTag', `删除preferences[${name}]成功`) } catch (e) { console.log('testTag', `删除preferences[${name}]失败`, JSON.stringify(e)); } } } const preferenceUtils = new PreferencesUtils() export default preferenceUtils as PreferencesUtils 3、使用

在EntryAbility.ts入口文件中,找到onCreate生命周期钩子,初始化Preferences

import PreferencesUtils from '../common/MyPerference/MyPerference' async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); // 初始化preference PreferencesUtils.loadPrefenence(this.context, 'MyPreference') }

需要使用的文件中数据读取数据

import PreferencesUtils from '../../common/MyPerference/MyPerference' async aboutToAppear() { this.isShow = await PreferencesUtils.getPreferenceValue('MyPreference', 'isShow', '') as boolean }

put、del方法同理

PS:持久化效果在预览器中不生效,仅在模拟机以及真机中有效



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有