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、效果
相关推荐
kirk_wang12 小时前
Flutter调用HarmonyOS NEXT原生相机拍摄&相册选择照片视频
flutter·华为·harmonyos
星释16 小时前
鸿蒙Flutter实战:17-无痛上架审核指南
flutter·华为·harmonyos
jikuaidi6yuan18 小时前
鸿蒙操作系统的安全架构
华为·harmonyos·安全架构
HarderCoder20 小时前
鸿蒙开发者认证-题库(二)
harmonyos
轻口味1 天前
HarmonyOS Next 最强AI智能辅助编程工具 CodeGenie介绍
人工智能·华为·harmonyos·deveco-studio·harmonyos-next·codegenie
jikuaidi6yuan1 天前
除了基本的事件绑定,鸿蒙的ArkUI
华为·harmonyos
GY-931 天前
Flutter中PlatformView在鸿蒙中的使用
flutter·harmonyos
小鱼仙官1 天前
鸿蒙系统 将工程HarmonyOS变成OpenHarmony
华为·harmonyos
塞尔维亚大汉1 天前
OpenHarmony(鸿蒙南向开发)——Combo解决方案之W800芯片移植案例
操作系统·harmonyos
拥有一颗学徒的心2 天前
鸿蒙开发中的骨架图:提升用户体验的关键一环
华为·信息可视化·人机交互·harmonyos·ux·sketch