鸿蒙HarmonyOS开辟 preferences首选项

打印 上一主题 下一主题

主题 1584|帖子 1584|积分 4752

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目次
弁言
官方介绍
怎样使用
完整示例
监听首选项变化
总结


弁言

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

ohos.data.preferences (用户首选项)用户首选项为应用提供Key-Value键值型的数据处置惩罚本领,支持应用持久化轻量级数据,并对其修改和查询。
数据存储形式为键值对,键的范例为字符串型,值的存储数据范例包括数字型、字符型、布尔型以及这3种范例的数组范例。
注意:Key的最大长度限定为80个字节,Value的最大长度限定为8192个字节。大概2000个字符左右的长度,如果数据多长建议使用文件或轻量型数据库来存储。
怎样使用

1、引入ohos.data.preferences的库
  1. import dataPreferences from '@ohos.data.preferences';
复制代码
2、获取存储实例
  1. //获取存储实例
  2. let store = await dataPreferences.getPreferences(getContext(this), 'store');
复制代码
3、通过get,put,delete等函数执行数据的 获取,存储,删除操纵。
  1. //读取存储值的时候必须提供默认值
  2. await this.store.put('name', 'jay');
  3. await this.store.delete('name');
复制代码
4、将当前Preferences实例的数据异步存储到用户首选项的持久化文件中
是的,还有最后一步,当调用执行完flush函数,才算真正的将数据存储在用户首选项的持久化文件中。
  1. await this.store.flush();
复制代码
完整示例

  1. import dataPreferences from '@ohos.data.preferences';
  2. @Entry@Componentstruct 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为我们提供了,订阅和取消订阅监听首选项,如果我们需要监听某个值的更新,比如有这么一个场景,用户购买物品,需要先去地址列表选择一个地址,通例的做法大概是跳转回的时间吧数据再带回来,但是有了首选项监听我们就轻松很多。
在哪里使用,就在哪里监听:
  1. import router from '@ohos.router'import dataPreferences from '@ohos.data.preferences';
  2. @Entry@Componentstruct 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%')  }}
复制代码
存储数据的页面:
  1. import router from '@ohos.router'import dataPreferences from '@ohos.data.preferences';
  2. @Entry@Componentstruct AddressListOptionsPage {  options: Array<string> = ['北京', '上海', '广州']  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"),匹配到一样的键,就可以根据键将最新的值更新。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户云卷云舒

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表