import { preferences } from "@kit.ArkData";
|
|
/**
|
* @ProjectName : HealthNS
|
* @FileName : PreferencesUtils
|
* @UserName : 修梦
|
* @Time : 2025/9/14 09:25
|
* @Description : 本地持久化存储
|
*/
|
class PreferencesUtils {
|
//创建PS本地存储的集合数据,可以支持多个存储存在
|
prefMap: Map<string,preferences.Preferences> = new Map();
|
//初始化方法 同步(类似于排队,上个任务完成,才回到下一个任务,基本不能有耗时操作)
|
//异步,开辟一个子线程,在子线程运行完毕,结果返回给主线程
|
//提供异步线程语法糖 async/await
|
//context: Context 当前那个页面要使用,name存储的名称
|
async loadPreferences(context: Context,name:string){
|
//为了保证正常进行初始化,推荐使用异常捕获,保证在异常情况下,APP不会崩溃
|
try {
|
//初始化无问题,执行正常逻辑
|
//创建PS存储
|
const pref = await preferences.getPreferences(context,name)
|
//初始后的存储,存放近Map集合
|
this.prefMap.set(name,pref)
|
console.info(`初始化${name}存储完成`)
|
} catch (e) {
|
console.info(`初始化${name}失败,失败原因: ${e}}`)
|
}
|
}
|
//添加数据 name: PS存储的名称,key:存储值的别名,value存储的具体值
|
async putPreferences(name:string,key:string,value:preferences.ValueType){
|
//先判断Map数据里有没有正常初始化(集合里存不存在当前PS存储)
|
if (!this.prefMap.has(name)) {
|
//! 非,表示改PS不存在
|
console.info(`${name}存储不存在,请初始化`)
|
return
|
}
|
try {
|
//当PS存储存在,执行当下逻辑
|
const pref = this.prefMap.get(name)
|
//写入数据
|
await pref?.put(key,value)
|
//持久化,刷磁盘
|
await pref?.flush()
|
console.info(`${name}存储写入数据成功`)
|
} catch (e){
|
console.info(`${name}存储写入数据失败,失败原因: ${e}`)
|
}
|
}
|
//读取数据
|
async getPreferences(name: string,key: string,defaultValue: preferences.ValueType){
|
//先判断Map数据里有没有正常初始化(集合里存不存在当前PS存储)
|
if (!this.prefMap.has(name)) {
|
//! 非,表示改PS不存在
|
console.info(`读取${name}存储不存在,请初始化`)
|
return
|
}
|
try {
|
//获取Map里面存的存储
|
const pref = this.prefMap.get(name)
|
//开始读取数据
|
const value = await pref?.get(key,defaultValue)
|
console.info(`读取${name}存储成功,数据为:${JSON.stringify(value)}`)
|
return value
|
} catch (e){
|
console.info(`读取${name}存储手失败,失败原因: ${e}}`)
|
return e
|
}
|
}
|
//删除数据
|
async delPreferences(name:string,key:string){
|
//先判断Map数据里有没有正常初始化(集合里存不存在当前PS存储)
|
if (!this.prefMap.has(name)) {
|
//! 非,表示改PS不存在
|
console.info(`读取${name}存储不存在,无法删除`)
|
return
|
}
|
try {
|
//拿到存储
|
const pref = this.prefMap.get(name)
|
//开始删除数据
|
await pref?.delete(key)
|
//刷磁盘
|
await pref?.flush()
|
console.info(`删除${name}存储成功`)
|
}catch (e) {
|
console.info(`删除${name}存储失败,失败原因:${e}`)
|
}
|
}
|
}
|
//仿单利,整个项目只需要一个存储,减少线程消耗
|
export default new PreferencesUtils() as PreferencesUtils
|