鸿蒙:Preferences持久化实现方案
前言:
我们在使用很多app时,都会发现搜索记录在杀掉后台后进入依然还在,这极可能是用了持久化数据方案。这篇博客分享使用鸿蒙Preferences实现持久化方案,相信你看完后会有所收获。
我们还是老样子,跟着官方文档学习与实践,链接如下:
https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-data-preferences#preferencesgetpreferenceshttps://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-data-preferences#preferencesgetpreferences看完了,就来做个Demo练一练,本人整理的运行效果图和代码如下:
1、Index.ets
import { getPreferencesUtil, PreferencesUtil } from "./PreferencesUtil"@Entry
@Component
export struct Index {preferences: PreferencesUtil | undefined = undefined@State message: string[] = ["Hello World", "番茄", "持久化", "杯子", "奶茶"]@State index: number = 0context: Context = this.getUIContext().getHostContext() as ContextaboutToAppear(): void {this.preferences = getPreferencesUtil()}@BuildertextBuilder() {Column({ space: 20 }) {Text(this.message[this.index])Button("持久化当前字符串,并切换下一个字符串").onClick(() => {this.index = Math.floor(Math.random() * 5)this.preferences?.put(this.context,this.message[this.index])})}}build() {Column({ space: 30 }) {this.textBuilder()Button("获取持久化字符串列表").onClick(async () => {const list = await this.preferences?.get(this.context)if (list) {this.getUIContext().showAlertDialog({ message: list.toString() })}})}.justifyContent(FlexAlign.Center).width("100%").height("100%")}
}
2、PreferencesUtil.ets
import { preferences } from '@kit.ArkData';/** 偏好设置工具类,用于管理字符串数组类型的偏好数据 */
export class PreferencesUtil {/** 偏好设置数据对象 */private dataPreferences: preferences.Preferences | null = null;/** 上下文对象 */private context: Context | null = null;/** 偏好设置存储名称 */private name: string = 'preferences';/*** 初始化工具类* @param context 上下文对象*/public init(context: Context) {this.context = context;this.dataPreferences = preferences.getPreferencesSync(context, {name: this.name});}/*** 获取存储的字符串数组* @param context 上下文对象* @returns 字符串数组*/public async get(context: Context): Promise<Array<string>> {const pf = await preferences.getPreferences(context, this.name);const data = pf.getSync('my_str', []) as Array<string>;return data;}/*** 添加字符串到数组并保存* @param context 上下文对象* @param str 要添加的字符串*/public async put(context: Context, str: string) {const pf = await preferences.getPreferences(context, this.name);let data = pf.getSync('my_str', []) as Array<string>;data.push(str);pf.putSync('my_str', data);pf.flushSync();}
}/** 单例实例 */
let preferencesUtil: PreferencesUtil | undefined;/*** 获取PreferencesUtil单例* @returns 唯一实例*/
export function getPreferencesUtil(): PreferencesUtil {if (!preferencesUtil) {preferencesUtil = new PreferencesUtil();}return preferencesUtil;
}
以上是个人经验分享。
看完了,如果觉得有所收获,可以免费点个赞或收藏。