HarmonyOS第二十一课——用户首选项实现数据持久化

564 阅读1分钟

一、Preferences 封装

目录结构

图片.png

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

初始化

图片.png

使用

图片.png

二、避坑 重新运行获取为空的问题

问题

在开发中通过await PreferenceUtil.putPreferenceValue('xsApp','name','哈哈')设置后,通过IDE运行App后获取之前存储的数据都为空。

问题原因 查看控制台

图片.png

通过安装运行执行的命令可以发现,每次都是执行卸载重装,之前存储的数据自然就被清掉了。

解决

通过IDE运行时,保存数据,只进行覆盖安装即可,在IDE中设置如下

keep application data 勾选即可

图片.png 图片.png