HarmonyNote.TOP鸿蒙开发笔记

鸿蒙应用开发中Preferences首选项本地存储实践

在鸿蒙应用开发过程中,将数据写入到手机沙箱目录中是一个常见的需求。要想将数据存储到沙箱目录下有四种方法,第一种是通过写文件的形式将数据保存到文件中;第二种是通过PersistentStorage将数据写入到文件中;第三种是通过Preferences首选项将数据写入到沙箱文件中;第四种是将数据存储到sqlite数据库中。这篇文章要讲的是第三种方式,即通过Preferences首选项实例的相关方法将数据存储到本机沙箱文件中。首先第一步是要获取Preferences实例,代码如下

async getStore() {
  const store: preferences.Preferences = await preferences.getPreferences(AppContextInstance.context, "preferences_store")
  return store
}

获取到Preferences实例后,可以调用异步的put方法或同步的putSync方法将键值对写入沙箱文件。要注意的是,写入数据操作结束后需要调用实例的flush方法将数据完全写入沙箱文件中,flush也有对应的同步实现flushSync。代码示例如下:

async set(key: string, val: DataTypeConstant.CommonValType) {
  const store: preferences.Preferences = await this.getStore()
  store.putSync(key, val)
}

async flush() {
  const store: preferences.Preferences = await this.getStore()
  store.flushSync()
}

如果要使用已经存储在Preferences中的数据,可以调用实例的异步方法get或同步方法getSync。代码示例如下:

async get(key: string) {
  const store: preferences.Preferences = await this.getStore()
  return store.getSync(key, '') as DataTypeConstant.CommonValType
}

如果数据成功存储到Preferences沙箱文件中,可以看到沙箱目录下会产生对应的文件,例如下面目录结构中的preferences_store及preferences_store.lock就是我调用实例方法后产生沙箱文件。

📁 [根目录]
├── 📁 chip_prod
├── 📁 config
├── 📁 cust
├── 📁 data
│   └── 📁 app
│       └── 📁 el2
│           └── 📁 100
│               └── 📁 base
│                   └── 📁 com.example.myapp001
│                       ├── 📁 .backup
│                       ├── 📁 cache
│                       ├── 📁 files
│                       ├── 📁 haps
│                       │   └── 📁 entry
│                       │       ├── 📁 cache
│                       │       ├── 📁 files
│                       │       └── 📁 preferences
│                       │           ├── preferences_store
│                       │           └── preferences_store.lock
│                       ├── 📁 preferences
│                       └── 📁 temp
└── 📁 com.huawei.hmos.arkwebcore
└── ... (其他相关目录省略)