鸿蒙HarmonyOS开发 preferences首选项

作者 : admin 本文共2765个字,预计阅读时间需要7分钟 发布时间: 2024-06-16 共1人阅读

目录

引言

官方介绍

如何使用

完整示例

监听首选项变化

总结


引言

鸿蒙开发中,不可避免的需要用到一些简单数据的持久化存储,今天就总结一下鸿蒙开发中的持久化存储库ohos.data.preferences (用户首选项),有过Android原生开发经验的同学会觉得很眼熟,这不就是android的SharePreferences嘛,先卖个关子,往下看

官方介绍

ohos.data.preferences (用户首选项)用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。

数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。

注意:Key的最大长度限制为80个字节,Value的最大长度限制为8192个字节。大概2000个字符左右的长度,如果数据多长建议使用文件或轻量型数据库来存储。

如何使用

1、引入ohos.data.preferences的库

import dataPreferences from '@ohos.data.preferences';

2、获取存储实例

//获取存储实例
let store = await dataPreferences.getPreferences(getContext(this), 'store');

3、通过get,put,delete等函数执行数据的 获取,存储,删除操作。

//读取存储值的时候必须提供默认值
await this.store.put('name', 'jay');
await this.store.delete('name');

4、将当前Preferences实例的数据异步存储到用户首选项的持久化文件中

是的,还有最后一步,当调用执行完flush函数,才算真正的将数据存储在用户首选项的持久化文件中。

 await this.store.flush();

完整示例

import dataPreferences from '@ohos.data.preferences';

@Entry
@Component
struct PreferencesPage {
  store: any = {}

  async aboutToAppear() {
    //获取存储实例
    let store = await dataPreferences.getPreferences(getContext(this), 'store');
  }

  build() {
    Row() {
      Column({ space: 20 }) {
        Button('数据存储').onClick(async () => {
          await this.store.put('name', 'jay');
          //调用数据持久化
          await this.store.flush();
          console.log('Preferences:数据存储成功');

        })
        Button('读取数据').onClick(async () => {
          let data = await  this.store.get('name', '不能说的秘密');
          console.log('Preferences:数据读取成功:' + data);

        })
        Button('删除数据').onClick(async () => {
          await  this.store.delete('name');
          console.log('Preferences:数据删除成功');

        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

重要:以上所有的函数调用包括获取存储实例,都必须异步调用,否则无法正确存储。

监听首选项变化

重点来了,Preferences为我们提供了,订阅和取消订阅监听首选项,如果我们需要监听某个值的更新,比如有这么一个场景,用户购买物品,需要先去地址列表选择一个地址,常规的做法可能是跳转回的时候吧数据再带回来,但是有了首选项监听我们就轻松很多。

在哪里使用,就在哪里监听:

import router from '@ohos.router'
import dataPreferences from '@ohos.data.preferences';

@Entry
@Component
struct AddressPage {
  store: any = {}
  @State city: string = ''

  async aboutToAppear() {
    //获取存储实例
    this.store = await dataPreferences.getPreferences(getContext(this), 'store');

    //开启数据监测
    this.store.on('change', async key => {
      if (key == 'city') {
        //读取数据
        this.city = await this.store.get('city', '');
        console.log('Preferences:数据读取成功');
      }
    })
  }

  build() {
    Row() {
      Column() {
        Button(this.city || "请选择")
          .onClick(() => {
            router.pushUrl({ url: 'pages/AddressListOptionsPage' });
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

存储数据的页面:

import router from '@ohos.router'
import dataPreferences from '@ohos.data.preferences';

@Entry
@Component
struct AddressListOptionsPage {
  options: Array = ['北京', '上海', '广州']
  store: any = {}

  async aboutToAppear() {
    //获取存储实例
    this.store = await dataPreferences.getPreferences(getContext(this), 'store');
  }

  build() {
    Row() {
      Column({ space: 20 }) {
        ForEach(this.options, (item) => {
          Button(item).onClick(async () => {
            await this.store.put('city', item);
            await this.store.flush();
            console.log('Preferences:数据存储成功');
            router.back();
          })
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

最后选中的结果成功展示在了按钮上。

总结

preferences首选项带给我最大的惊喜就是可以订阅更新,这个非常实用,我们不需要像以往在每个要用到值的地方更新了,我们只需要订阅on(“change”),匹配到一样的键,就可以根据键将最新的值更新。

本站无任何商业行为
个人在线分享 » 鸿蒙HarmonyOS开发 preferences首选项
E-->