HarmonyOS学习(十五)——数据管理(四) 用户首选项封装

文章目录

1、实体类
plain 复制代码
/**
 * 定义实体类
 */
export default class AccountBean{
  id: number;
  name: string;
  price: string;
}
2、工具类封装
plain 复制代码
import dataPreference from '@ohos.data.preferences';
import common from '@ohos.app.ability.common';
import preferences from '@ohos.data.preferences';

//preference的名称
const PREFERENCE_NMAE = 'pre_name';
const LOG_TAG = 'preferencesUtil';
let context = getContext(this) as common.UIAbilityContext;

export default class PreferenceUtils {


  //preference对象
  private preferences:preferences.Preferences | null = null;


  /**
   * 获取preferenced对象
   */
 async  getPreferencesFromStorage(){
   await dataPreference.getPreferences(context,PREFERENCE_NMAE).then((data) => {
      this.preferences = data
     console.info(LOG_TAG,'init preferences  success')
    }).catch((err) =>{
     console.error(LOG_TAG,'init preferences faild ,reason:'+err);
   })
  }

  /**
   * 存放preferences键值对
   * @param key
   * @param value
   */
  async putPreference(key: string,value: string){
    if (this.preferences === null){
      await this.getPreferencesFromStorage();
    }
    await this.preferences.put(key,value).then(() => {
      console.info(LOG_TAG,'put data success');
    }).catch((err) => {
      console.error(LOG_TAG,'put data failed,reason:'+err);
    })
    await this.preferences.flush();
  }

  /**
   * 获取指定key的preference的值
   * @param key
   * @returns
   */
  async getPreference(key: string){
    let result = '';
    if(this.preferences === null){
      await this.getPreferencesFromStorage();
    }
    await this.preferences.get(key,'').then((data) => {
      result = data.toString();
      console.info(LOG_TAG,'get data success, data:'+data.toString());
    }).catch((err) => {
      console.error(LOG_TAG,'get data failed,reason:'+err);
    })
    return result;
  }

  /**
   * 删除指定key的preferences
   * @param key
   */
  async deletePreference(key: string){
    if(this.preferences === null){
      await this.getPreferencesFromStorage();
    }
    await this.preferences.delete(key).then(() => {
      console.info(LOG_TAG,'delete data success');
    }).catch((err) => {
      console.error(LOG_TAG,'get data failed,reason:'+err);
    })
  }

  /**
   * 更新指定key的值
   * @param key
   * @param value
   */
  async updatePreference(key: string,value: string){
    if(this.preferences === null){
      await this.getPreferencesFromStorage();
    }
    this.deletePreference(key);
    this.putPreference(key,value);
  }
  /**
   * 数据持久化
   */
  async flushPreference(){
    if(this.preferences === null){
      await this.getPreferencesFromStorage();
    }
    await this.preferences.flush((err) => {
      if(err){
        console.info(LOG_TAG,'flush failed err.code:'+err.code + 'err message:'+err.message);
        return;
      }
      console.info(LOG_TAG,'flush success');
    })
  }

  /**
   * 删除Preferences
   */
  async  deletePreferences(){
    await preferences.deletePreferences(context,PREFERENCE_NMAE).then(() => {
      console.info(LOG_TAG,'delete  success');
    }).catch((err) => {
      console.error(LOG_TAG,'delete  failed err.code:'+err.code + 'err message:'+err.message);
    })
  }
}
3、调用实体类
plain 复制代码
import AccountBean from '../entry/AccountBean';
import preferenceUtils from '../pages/PreferenceUtils'
const PERFERENCE_KEY_NAME = 'pre_utils_name';

@Component
@Entry
struct UtilsPage {
  @State message: string = 'show messge';
  private preferenceUtils = new preferenceUtils();
  
  async aboutToAppear() {
    //初始化preferences
    await this.preferenceUtils.getPreferencesFromStorage();
  }

  build() {
    Column() {
      Text(this.message)
        .fontSize(30)

      Button('写入数据')
        .type(ButtonType.Capsule)
        .margin({top:10})
        .onClick(() => {
         let newAccountBean: AccountBean = {id:1,name:'购物',price:'22'}
          this.preferenceUtils.putPreference(PERFERENCE_KEY_NAME,JSON.stringify(newAccountBean));
        })

      Button('读取数据')
        .type(ButtonType.Capsule)
        .margin({top:10})
        .onClick(() => {
          this.preferenceUtils.getPreference(PERFERENCE_KEY_NAME).then((resultData) => {
            this.message =  resultData;
          });
        })

      Button('修改数据')
        .type(ButtonType.Capsule)
        .margin({top:10})
        .onClick(() => {
          let newAccount: AccountBean = {id:1,name:'购物',price:'25'};
          this.preferenceUtils.updatePreference(PERFERENCE_KEY_NAME,JSON.stringify(newAccount));
        })

      Button('删除数据')
        .type(ButtonType.Capsule)
        .margin({top:10})
        .onClick(() => {
         this.preferenceUtils.deletePreference(PERFERENCE_KEY_NAME);
        })
    }
    .width('100%')
  }
}
4、效果
相关推荐
木子雨廷1 小时前
第 01 天|心智模型:iOS/Flutter 开发者学鸿蒙,第一步该换什么思路?
harmonyos
lilian2332 小时前
HarmonyOS 7 新特性(二十一)|FAST Kit:自然排序与向量计算
华为·harmonyos
tsqtsqtsq03092 小时前
鸿蒙系统 Call Service Kit 功能详解与开发适配指南
华为·harmonyos
贾伟康3 小时前
【时光清单|17】HarmonyOS ArkTS 亮暗色与视觉令牌实战:集中颜色、间距和交互状态避免页面割裂
harmonyos·arkts·arkui·深色模式·设计系统
贾伟康3 小时前
【时光清单|15】HarmonyOS ArkTS 本地状态持久化实战:让保存、删除和页面返回后的数据即时一致
harmonyos·arkts·状态管理·preferences·arkdata
HarmonyOS_SDK11 小时前
焕新鸿蒙应用权限管理方案,应用授权体验再升级
harmonyos
黑臂麒麟2 天前
HarmonyOS鸿蒙实战应用7:随手账本——数据导出与分享
华为·app·arkts·鸿蒙
贾伟康2 天前
【天体运行模拟|11】HarmonyOS ArkTS 收藏与笔记实战:同步知识页和个人学习记录
harmonyos·arkts·preferences·多设备适配·arkdata
2501_919749032 天前
华为鸿蒙录音可视化APP—小羊声觉
华为·harmonyos·鸿蒙
大雷神2 天前
HarmonyOS AR Engine深度估计实战——把毫米距离画成实时热力图
华为·ar·harmonyos