一、Preferences 封装
目录结构
PreferenceUtil 的封装
import preferences from '@ohos.data.preferences'
class PreferenceUtil{
prefMap: Map<string,preferences.Preferences> = new Map()
/*
// 初始化 方式一
loadPreference(content,name: string){
preferences.getPreferences(content,name).then(pref =>{
//初始化成功 保存到Map
this.prefMap.set(name,pref)
}).catch(reason =>{
console.log('初始化失败的原因',JSON.stringify(reason))
})
}
* */
// 初始化 方式二
async loadPreference(content,name: string){
try {
let pref = await preferences.getPreferences(content,name)
this.prefMap.set(name,pref)
console.log('初始化成功')
}catch (e){
console.log('加载失败',JSON.stringify(e))
}
}
//保存数据
async putPreferenceValue(name:string, key:string,value: preferences.ValueType){
// 获取
if (!this.prefMap.has(name)){
console.log('没有初始化')
return
}
try {
let pref = this.prefMap.get(name)
// 写入数据
await pref.put(key,value)
// 保存到本地磁盘
await pref.flush()
}catch (e){
console.log('数据保存失败',JSON.stringify(e))
}
}
// 读取信息
async getPreferenceValue(name:string, key:string ,defaultValue: preferences.ValueType){
if (!this.prefMap.has(name)){
console.log('没有初始化')
return
}
try {
let pref = this.prefMap.get(name)
// 读取数据
let value = await pref.get(key,defaultValue)
return value
}catch (e){
console.log('读取信息失败',JSON.stringify(e))
}
}
// 删除信息
async deletePreferenceValue(name:string, key:string){
if (!this.prefMap.has(name)){
console.log('没有初始化')
return
}
try {
let pref = this.prefMap.get(name)
// 删除数据
await pref.delete(key)
// await pref.flush()
}catch (e){
console.log('数据删除失败',JSON.stringify(e))
}
}
}
const preferenceUtil = new PreferenceUtil()
//导出
export default preferenceUtil as PreferenceUtil
初始化
使用
二、避坑 重新运行获取为空的问题
问题
在开发中通过await PreferenceUtil.putPreferenceValue('xsApp','name','哈哈')设置后,通过IDE运行App后获取之前存储的数据都为空。
问题原因 查看控制台
通过安装运行执行的命令可以发现,每次都是执行卸载重装,之前存储的数据自然就被清掉了。
解决
通过IDE运行时,保存数据,只进行覆盖安装即可,在IDE中设置如下
keep application data 勾选即可