文章目录
场景
有时候我们需要快速的储存一些标识,比如第一次启动应用的隐私协议弹窗,这个时候我们就需要一直东西,将这个标识存起来
整体逻辑
使用的是 preferences
用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。
数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。
首先,在 UIAbility 中初始化preferences.Preferences对象 → 在pages页面中获取该对象 → 在pages中对对象赋值,读取
具体代码和逻辑
初始化代码
这边建了一个initializePreferences()工具类
import { preferences } from '@kit.ArkData';
let dataPreferences: preferences.Preferences | null = null;
export async function initializePreferences(context: Context) {
let options: preferences.Options = { name: 'local_storage' };
try {
const prefs = await preferences.getPreferences(context, options);
dataPreferences = prefs;
console.info("Succeeded in getting preferences.");
} catch (err) {
console.error("Failed to get preferences. code =" + err.code + ", message =" + err.message);
}
}
export function getPreferences(): preferences.Preferences | null {
return dataPreferences;
}
然后在大家的 UIAbility中初始化这个Preferences ,在onWindowStageCreate中初始化即可
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created, set main page for this ability
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
// 初始化 Preferences
initializePreferences(this.context)
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.');
});
}
然后在 Pages中
先获取对象
pre = getPreferences()
这样赋值
this.pre.put("privacy_agreement","1")
this.pre.flush();
········这里要注意·········
this.pre.flush();
这个是让Preferences持久化的,这里是一个容易忽略的地方,有时候明明put了,但是应用重启后,这个值获取不到怎么回事?就是没有将其持久化,持久化的作用是为了应用在退出后,再次进来也还能得到这个值
这样获取value
this.pre.get('privacy_agreement', 'default').then((data: preferences.ValueType) => {
console.info("Succeeded in getting value of 'startup'. Data: " + data);
}).catch((err: BusinessError) => {
console.error("Failed to get value of 'startup'. code =" + err.code + ", message =" + err.message);
})
注意
privacy_agreement 这个值就是key,读和写都得一样,local_storage local_storage 是用于标识存储的名称。这个名称实际上是一个标签或键,用来区分不同的 Preferences 存储实例。