鸿蒙开发相关知识(四)【数据持久化(用户首选项、关系型数据库)、通知(基础通知、进度条通知、通知意图)】


一、数据持久化

1、用户首选项

(1)语法说明

  • 为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。
  • Key键为string类型,要求非空且长度不超过80个字节。
  • 如果Value值为string类型,可以为空,不为空时长度不超过8192个字节。
  • 建议存储的数据不超过一万条。
  • 导入用户首选项模块
import dataPreferences from '@ohos.data.preferences';
  • 要获取Preferences实例,读取指定文件
 dataPreferences.getPreferences(this.context, 'mystore', (err, preferences) => {
   
   
     if (err) {
   
   
       console.error(`Failed to get preferences. Code:${
     
     err.code},message:${
     
     err.message}`);
       return;
     }
     console.info('Succeeded in getting preferences.');
     // 进行相关数据操作
   })
  • 数据操作
  • 写入数据,如果已经存在则会覆盖,可利用.has() 判断是否存在
 preferences.put('startup', 'auto', (err) => {
   
   
    if (err) {
   
   
      console.error(`Failed to put data. Code:${
     
     err.code}, message:${
     
     err.message}`);
      return;
    }
    console.info('Succeeded in putting data.');
  })
  • 读取数据,如果值为null或者非默认值类型,则返回默认数据。
 preferences.get('startup', 'default', (err, val) => {
   
   
    if (err) {
   
   
      console.error(`Failed to get value of 'startup'. Code:${
     
     err.code}, message:${
     
     err.message}`);
      return;
    }
    console.info(`Succeeded in getting value of 'startup'. val: ${
     
     val}.`);
  })
  • 删除数据
  preferences.delete('startup', (err) => {
   
   
    if (err) {
   
   
      console.error(`Failed to delete the key 'startup'. Code:${
     
     err.code}, message:${
     
     err.message}`);
      return;
    }
    console.info("Succeeded in deleting the key 'startup'.");
  })
  • 数据持久化,应用存入数据到Preferences实例后,可以使用flush()方法实现数据持久化
preferences.flush((err) => {
   
   
    if (err) {
   
   
      console.error(`Failed to flush. Code:${
     
     err.code}, message:${
     
     err.message}`);
      return;
    }
    console.info('Succeeded in flushing.');
  })

(2)完整代码示例

  • ets/common/util/PreferencesUtil.ts
  • 加载实例、写入、获取、删除方法
import preferences from '@ohos.data.preferences';

class PreferencesUtil{
   
   

  prefMap: Map<string, preferences.Preferences> = new Map()

  async loadPreference(context, name: string){
   
   
    try {
   
    // 加载preferences
      let pref = await preferences.getPreferences(context, name)
      this.prefMap.set(name, pref)
      console.log('testTag', `加载Preferences[${
     
     name}]成功`)
    } catch (e) {
   
   
      console.log('testTag', `加载Preferences[${
     
     name}]失败`, JSON.stringify(e))
    }
  }

  async putPreferenceValue(name: string, key: string, value: preferences.ValueType){
   
   
    if (!this.prefMap.has(name)) {
   
   
      console.log('testTag', `Preferences[${
     
     name}]尚未初始化!`)
      return
    }
    try {
   
   
      let pref = this.prefMap.get(name)
      // 写入数据
      await pref.put(key, value)
      // 刷盘
      await pref.flush()
      console.log('testTag', `保存Preferences[${
     
     name}.${
     
     key} = ${
     
     value}]成功`)
    } catch (e) {
   
   
      console.log('testTag', `保存Preferences[${
     
     name}.${
     
     key} = ${
     
     value}]失败`, JSON.stringify(e))
    }
  }

  async getPreferenceValue(name: string, key: string, defaultValue: preferences.ValueType){
   
   
    if (!this.prefMap.has(name)) {
   
   
      console.log('testTag', `Preferences[${
     
     name}]尚未初始化!`)
      return
    }
    try {
   
   
      let pref = this.prefMap.get(name)
      // 读数据
      let value = await pref.get(key, defaultValue)
      console.log('testTag', `读取Preferences[${
     
     name}.${
     
     key} = ${
     
     value}]成功`)
      return value
    } catch (e) {
   
   
      console.log('testTag', `读取Preferences[${
     
     name}.${
     
     key} ]失败`, JSON.stringify(e))
    }
  }
}

const preferencesUtil = new PreferencesUtil()

export default preferencesUtil as PreferencesUtil
  • ets/entryability/EntryAbility.ets
  • 应用启动时调用加载实例方法
import UIAbility from '@ohos.app.ability.UIAbility';
import PreferencesUtil from '../common/util/PreferencesUtil'

export default class EntryAbility extends UIAbility {
   
   
  async onCreate(want, launchParam) {
   
   
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate running');
    // 加载Preferences
    await PreferencesUtil.loadPreference(this.context, 'MyPreferences')
  }
}

  • ets/pages/Index.ets
  • 页面出现前(aboutToAppear())获取实例并赋值
import IndexFontSizePanel from '../views/IndexFontSizePanel'
import PreferencesUtil from '../common/util/PreferencesUtil'

@Entry
@Component
struct Index {
   
   
  @State message: string = '页面列表'
  @State showPanel: boolean = false
  @Provide fontSize: number = 16

  async aboutToAppear(){
   
   
    this.fontSize = await PreferencesUtil.getPreferenceValue('MyPreferences', 'IndexFontSize', 16) as number
  }

  build() {
   
   
    Column() {
   
   
      // 字体修改面板
      if(this.showPanel){
   
   
        IndexFontSizePanel()
          .transition({
   
   
            translate: {
   
    y: 115 }
          })
      }
    }
    .width('100%')
    .height('100%')
  }

}
  • views/IndexFontSizePanel.ets
  • onChange 方法中修改实例值
import PreferencesUtil from '../common/util/PreferencesUtil'

@Component
export default struct IndexFontSizePanel {
   
   
  @Consume fontSize: number
  fontSizLabel: object = {
   
   
    14: '小',
    16: '标准',
    18: '大',
    20: '特大',
  }

  build() {
   
   
    Column() {
   
   
      Text(this.fontSizLabel[this.fontSize])
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值