注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下
如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识
目录
1. 应用数据持久化
2. 应用数据持久化-用户首选项
2.1 概述
2.2 约束限制
2.3 常用方法
2.3.1 封装用户首选项工具类
2.3.2 初始化用户首选项
2.3.3 使用用户首选项
应用数据持久化,是指应用将内存中的数据通过文件或数据库的形式保存到设备上。内存中的数据形态通常是任意的数据结构或数据对象,存储介质上的数据形态可能是文本、数据库、二进制文件等。
HarmonyOS标准系统支持典型的存储数据形态,包括用户首选项、键值型数据库、关系型数据库。
用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。当用户希望有一个全局唯一存储的地方,可以采用用户首选项来进行存储。Preferences会将该数据缓存在内存中,当用户读取的时候,能够快速从内存中获取数据,当需要持久化时可以使用flush接口将内存中的数据写入持久化文件中。Preferences会随着存放的数据量越多而导致应用占用的内存越大,因此,Preferences不适合存放过多的数据,也不支持通过配置加密,适用的场景一般为应用保存用户的个性化设置(字体大小,是否开启夜间模式)等。
参考华为官方文档:文档中心
注意:记得用真机或者模拟器运行
注意:PreferencesUtil文件结尾是ts不是ets
import dataPreferences from '@ohos.data.preferences'
import hilog from '@ohos.hilog';
/**
* 用户首选项(存储简单数据)
*/
export default class PreferencesUtil {
// 用户首选项名称
private static preferenceName: string = 'myStore'
/**
* 创建
* @param context
*/
static createPreferences(context) {
globalThis.getFontPreferences = (() => {
let preferences: Promise =
dataPreferences.getPreferences(context, this.preferenceName);
return preferences;
});
}
/**
* 存放数据
* @param value
*/
static savePreferencesValue(key: string, value: string) {
globalThis.getFontPreferences().then((preferences) => {
preferences.has(key).then(async (isExist) => {
if (!isExist) {
await preferences.put(key, value);
preferences.flush();
}
}).catch((err) => {
hilog.info(0xFF00, 'preferencesTag', '%{public}s', 'save PreferencesValue fail');
});
}).catch((err) => {
hilog.info(0xFF00, 'preferencesTag', '%{public}s', 'save PreferencesValue fail');
});
}
/**
* 获取数据
* @returns
*/
static async getPreferencesValue(key: string) {
let value: string = '';
const preferences = await globalThis.getFontPreferences();
value = await preferences.get(key, value);
return value;
}
/**
* 删除数据
*/
static async deletePreferencesValue(key: string) {
const preferences: dataPreferences.Preferences = await globalThis.getFontPreferences();
let deleteValue = preferences.delete(key);
deleteValue.then(() => {
hilog.info(0xFF00, 'preferencesTag', '%{public}s', 'delete PreferencesValue success');
}).catch((err) => {
hilog.info(0xFF00, 'preferencesTag', '%{public}s', 'delete PreferencesValue fail');
});
}
}
在EntryAbility文件中初始化用户首选项
onWindowStageCreate(windowStage: window.WindowStage): void {
// 初始化用户首选项
PreferencesUtil.createPreferences(this.context);
// Main window is created, set main page for this ability
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
windowStage.loadContent('pages/Index', (err) => {
if (err.code) {
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
return;
}
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
});
}
注意:用户首选项存的值全局都可以获取到
import PreferencesUtil from '../utils/PreferencesUtil'
@Entry
@Component
struct Index {
build() {
Column() {
Text('存值')
.onClick(() => {
PreferencesUtil.savePreferencesValue('username', '东林')
console.log('preferences save success')
}).margin({bottom:50})
Divider()
Text('点我获取preferences值')
.onClick(async () => {
const username = await PreferencesUtil.getPreferencesValue('username')
console.log('preferences username:' + JSON.stringify(username))
}).margin({bottom:50})
Divider()
Text('删除')
.onClick(async () => {
await PreferencesUtil.deletePreferencesValue('username')
console.log('preferences remove success')
})
}
.height('100%')
.width('100%')
}
}