用户首选项存储
参考文档: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/data-persistence-by-preferences-V5
截屏2024-08-22 17.58.44.png
图中有误, 导入使用
import preferences from '@ohos.data.preferences';
截屏2024-08-22 18.00.57.png
截屏2024-08-22 18.01.53.png
代码实例
定义一个PreferenceUtil
, 实现preferences的增加和查询, 需要注意增加和查询 都是异步操作, 需要用到 async
和 await
(告诉开发者这个方法是异步的, 需要等待await后面的代码执行完, 才能执行主线程中的操作), 类似于OC中的调度组
import preferences from '@ohos.data.preferences';
import { BusinessError } from '@kit.BasicServicesKit';
class PreferenceUtil {
prefMap: Map<string, preferences.Preferences> = new Map()
//异步调用
// loadPreference(context: Context, name: string) {
// preferences.getPreferences(context, name).then( pref => {
//
// this.prefMap.set(name,pref)
// console.log(`加载${name} 成功`)
//
// }).catch( (reason: BusinessError) => {
// console.log(`加载${name}失败`)
//
// })
// }
//修改为同步调用, 实际是内部进行了promise封装
async loadPreference(context: Context, name: string) {
try {
let pref = await preferences.getPreferences(context, name)
this.prefMap.set(name,pref)
} catch (e) {
console.log(`加载${name}失败`)
}
}
async putPreferenceValue(name: string, key: string, value: preferences.ValueType) {
if (!this.prefMap.has(name)) {
console.log(`preference${name}未初始化`)
return
}
try {
let pref = this.prefMap.get(name)
//写入数据
await pref?.put(key,value)
// 刷盘
await pref?.flush()
console.log(`preference${name} 保存${value} 至 ${key} 成功}`)
} catch (e) {
console.log(`preference${name} 保存${value} 至 ${key} 失败}`)
}
}
async getPreferenceValue(name: string, key: string, defaultValue: preferences.ValueType): Promise<preferences.ValueType>{
if (!this.prefMap.has(name)) {
console.log(`preference${name}未初始化`)
return defaultValue
}
try {
let pref = this.prefMap.get(name) as preferences.Preferences
//写入数据
let value: preferences.ValueType = await pref.get(key, defaultValue)
console.log(`preference${name} 读取${key} 的值 ${value}成功}`)
return value
} catch (e) {
console.log(`preference${name} 读取${key} 的值失败}`)
}
return defaultValue
}
}
const preferenceUtil = new PreferenceUtil()
export default preferenceUtil as PreferenceUtil
在EntryAbility.ets
的onCreate方法中对preferences 进行初始化读取
async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): Promise<void> {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
await PreferenceUtil.loadPreference(this.context, 'MyPreference')
}
在任意地方进行存取, 例如
存
async aboutToAppear(): Promise<void> {
console.log( 'Index aboutToDisappear')
let key = await PreferenceUtil.getPreferenceValue('MyPreference', 'abc', '666') as string
console.log(`abc的值 ${key}`)
}
取
PreferenceUtil.putPreferenceValue('MyPreference', 'abc', '999')