wwf
3 天以前 23fa268f56dcd99c8dcd46f50f3ffcaa4cdcbc49
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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