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、效果
相关推荐
行者9622 分钟前
Flutter与OpenHarmony深度集成:数据导出组件的实战优化与性能提升
flutter·harmonyos·鸿蒙
小雨下雨的雨24 分钟前
Flutter 框架跨平台鸿蒙开发 —— Row & Column 布局之轴线控制艺术
flutter·华为·交互·harmonyos·鸿蒙系统
小雨下雨的雨1 小时前
Flutter 框架跨平台鸿蒙开发 —— Center 控件之完美居中之道
flutter·ui·华为·harmonyos·鸿蒙
小雨下雨的雨2 小时前
Flutter 框架跨平台鸿蒙开发 —— Icon 控件之图标交互美学
flutter·华为·交互·harmonyos·鸿蒙系统
小雨下雨的雨2 小时前
Flutter 框架跨平台鸿蒙开发 —— Placeholder 控件之布局雏形美学
flutter·ui·华为·harmonyos·鸿蒙系统
行者962 小时前
OpenHarmony Flutter弹出菜单组件深度实践:从基础到高级的完整指南
flutter·harmonyos·鸿蒙
小雨下雨的雨3 小时前
Flutter 框架跨平台鸿蒙开发 —— Padding 控件之空间呼吸艺术
flutter·ui·华为·harmonyos·鸿蒙系统
行者963 小时前
Flutter到OpenHarmony:横竖屏自适应布局深度实践
flutter·harmonyos·鸿蒙
小雨下雨的雨4 小时前
Flutter 框架跨平台鸿蒙开发 —— Align 控件之精准定位美学
flutter·ui·华为·harmonyos·鸿蒙
行者964 小时前
Flutter与OpenHarmony集成:跨平台开关组件的实践与优化
flutter·harmonyos·鸿蒙