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、效果
相关推荐
Damon小智1 小时前
HarmonyOS NEXT 技术实践-基于基础视觉服务的多目标识别
华为·harmonyos
爱笑的眼睛1119 小时前
uniapp 极速上手鸿蒙开发
华为·uni-app·harmonyos
K.P19 小时前
鸿蒙元服务从0到上架【第三篇】(第二招有捷径)
华为·harmonyos·鸿蒙系统
K.P20 小时前
鸿蒙元服务从0到上架【第二篇】
华为·harmonyos·鸿蒙系统
敲代码的小强1 天前
Flutter项目兼容鸿蒙Next系统
flutter·华为·harmonyos
程序猿会指北1 天前
纯血鸿蒙APP实战开发——Text实现部分文本高亮和超链接样式
移动开发·harmonyos·arkts·openharmony·arkui·组件化·鸿蒙开发
鸿蒙自习室1 天前
鸿蒙开发——关系型数据库的基本使用与跨设备同步
前端·数据库·华为·harmonyos·鸿蒙
SoraLuna2 天前
「Mac畅玩鸿蒙与硬件45」UI互动应用篇22 - 评分统计工具
开发语言·macos·ui·华为·harmonyos
资讯分享周2 天前
鸿蒙风起,未来已来——云学堂鸿蒙应用认证开营啦!
华为·harmonyos
Lincode122 天前
HarmonyOS--鸿蒙三方库--lottie
华为·harmonyos