0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙OS开发实例:【工具类封装-首选项本地存储】

jf_46214456 ? 来源:jf_46214456 ? 作者:jf_46214456 ? 2024-03-28 15:45 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

本地首选项数据的保存,利用key value

【使用要求】

DevEco Studio 3.1.1 Release
api 9

【使用示例】

1、app启动时,从本地读取数据,并写到内存中去
注意:修改EntryAbility.ts的扩展名,改成ets,即:EntryAbility.ets

import MyPreferencesUtil from '../common/utils/MyPreferencesUtil'
export default class EntryAbility extends UIAbility {
     onCreate(want, launchParam) {
           MyPreferencesUtil.getData(this.context)
     }
 }

2、在修改内存数据时,再调用一下保存方法
注意:开发工具DevEco studio中,默认每次启动app是先卸载再安装导致本地保存的数据丢失,需要改下配置每次运行都覆盖安装【entry-->edit config... --> keep application data】

import {MyPreferencesUtil,UserInfo} from '../common/utils/MyPreferencesUtil'
Button('测试').onClick(()= >{
     console.info('====当前内存信息 1 ',JSON.stringify(MyPreferencesUtil.getInstance()))
    MyPreferencesUtil.getInstance().mUserInfo.token = "测试测试"
    MyPreferencesUtil.saveData()
    console.info('====当前内存信息 2 ',JSON.stringify(MyPreferencesUtil.getInstance()))
})
export class MyPreferencesUtil {
  //日志过滤器
  private static readonly LOG: string = "====MyPreferencesUtil"
  //本地保存的文件名,和文件内的key名这里打算共用一个就行
  private static readonly FILENAME_AND_KEY: string = 'FILENAME_AND_KEY'

  /** 本地要保存的用户信息 */
  public mUserInfo: UserInfo = new UserInfo()
  // 本地要保存的环境信息
  public mEnvirInfo: EnvirInfo = new EnvirInfo()
  //=========单例模式,保存数据到内存实例 start=========
  private static instance: MyPreferencesUtil;

  private constructor() {
  }
  /**
   * 通过单例,获取本地映射到内存中的实例
   * @returns 内存中本地数据的实例
   */
  public static getInstance() {
    if (this.instance == null) {
      this.instance = new MyPreferencesUtil();
    }
    return this.instance;
  }

单例模式,保存数据到内存实例

从磁盘本地读取数据到内存,赋值给instance

public static async getData(context: Context) {
    try {
      console.info(MyPreferencesUtil.LOG, 'getData');
      let file = await dataPreferences.getPreferences(context, MyPreferencesUtil.FILENAME_AND_KEY)
      console.info(MyPreferencesUtil.LOG, 'getData', 'file succ');
      let value = await file.get(MyPreferencesUtil.FILENAME_AND_KEY, JSON.stringify(MyPreferencesUtil.getInstance()))
      console.info(MyPreferencesUtil.LOG, 'getData', 'get succ', 'value:' + value);
      Object.assign(MyPreferencesUtil.getInstance(), JSON.parse(value.toString()))//将本地数据 拷贝到单例中去。
      console.info(MyPreferencesUtil.LOG, 'getData', 'assign succ');
      let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT;
      let data = await bundleManager.getBundleInfoForSelf(bundleFlags); //开始保存app的版本名称和版本号
      MyPreferencesUtil.getInstance().mEnvirInfo.versionName = data.versionName
      MyPreferencesUtil.getInstance().mEnvirInfo.versionCode = data.versionCode
      console.info(MyPreferencesUtil.LOG, 'getData', 'set versionName and versionCode succ');
    } catch (e) {
      console.error(MyPreferencesUtil.LOG, 'getData', JSON.stringify(e));
    }
  }
鸿蒙OS开发更多内容↓点击HarmonyOSOpenHarmony技术
鸿蒙技术文档开发知识更新库gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md在这。或+mau123789学习,是v喔

搜狗高速浏览器截图20240326151547.png

数据备份至磁盘本地

public static async saveData() {
    try {
      console.info(MyPreferencesUtil.LOG, 'saveData');
      let file = await dataPreferences.getPreferences(getContext(this), MyPreferencesUtil.FILENAME_AND_KEY)
      console.info(MyPreferencesUtil.LOG, 'saveData', 'file succ');
      await file.put(MyPreferencesUtil.FILENAME_AND_KEY, JSON.stringify(MyPreferencesUtil.getInstance()))
      console.info(MyPreferencesUtil.LOG, 'saveData', 'put succ');
      await file.flush()
      console.info(MyPreferencesUtil.LOG, 'saveData', 'flush succ');
    } catch (e) {
      console.error(MyPreferencesUtil.LOG, 'saveData', JSON.stringify(e));
    }
  }
}

用户信息

export class UserInfo {

用户登录成功后要保存的token

public token: string = ""
}

环境信息

export class EnvirInfo {

首次启动的弹窗是否点击过“同意”。true:已同意,false:没同意

public isAgreement: boolean = false

当前app的版本名称

public versionName: string = ''

当前app的版本号

public versionCode: number = 0
}

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 封装
    +关注

    关注

    128

    文章

    8832

    浏览量

    145924
  • 存储
    +关注

    关注

    13

    文章

    4557

    浏览量

    87732
  • 鸿蒙OS
    +关注

    关注

    0

    文章

    191

    浏览量

    5045
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    HarmonyOS开发案例:【用户首选项

    用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,常用于保存应用配置信息、用户偏好设置等。本篇Codelab将基于用户首选项实现一个简单的数据管理应用,包含新增、查询和删除的功能。
    的头像 发表于 04-18 15:34 ?1552次阅读
    HarmonyOS<b class='flag-5'>开发</b>案例:【用户<b class='flag-5'>首选项</b>】

    HarmonyOS开发案例:【首选项

    基于HarmonyOS的首选项能力实现的一个简单示例。
    的头像 发表于 04-19 16:20 ?1832次阅读
    HarmonyOS<b class='flag-5'>开发</b>案例:【<b class='flag-5'>首选项</b>】

    如何设置Xilinx ISE首选项11.x 12.x的默认值

    可能是一个新手问题,我们有一个配置允许不同版本的附加工具,如modelsim,synplicity。我们想知道是否有办法告诉Xilinx默认使用什么。具体来说,我们有兴趣设置以下值: 首选项
    发表于 11-15 11:29

    查看首选项未保存, 如何保存设置?

    您好,我想把论坛中的帖子看成“平面阅读模式”而不是“线程阅读模式”。所以我转到用户控制面板,编辑配置文件,特性首选项,查看首选项,并将其设置为“平面”,然后单击“保存配置文件”。如果我移动到其他
    发表于 09-11 12:08

    ESP8266/ARDUINO构建H找不到首选项怎么解决?

    大家好!我对运行 Arduino 核心的 ESP32 有一些扎实的经验,并且一直在使用首选项库来存储,你猜对了,首选项,到该平台上的 NVS。这是一个简单而顺利的过程。我正在尝试将我的代码移植到运行
    发表于 02-21 07:44

    鸿蒙OS开发实例:【工具封装-页面路由】

    import common from '@ohos.app.ability.common'; import router from '@ohos.router'封装app内的页面之间跳转、app与app之间的跳转工具
    的头像 发表于 03-28 16:16 ?1296次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>OS</b><b class='flag-5'>开发</b><b class='flag-5'>实例</b>:【<b class='flag-5'>工具</b><b class='flag-5'>类</b><b class='flag-5'>封装</b>-页面路由】

    鸿蒙开发接口数据管理:【@ohos.data.preferences (首选项)】

    首选项为应用提供key-value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型。
    的头像 发表于 06-10 18:46 ?2610次阅读

    harmony OS NEXT-通过用户首选项实现数据持久化

    # 鸿蒙通过用户首选项实现数据持久化 ## 1.1 场景介绍 用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。当用户希望有一个全局唯一
    的头像 发表于 04-29 16:38 ?667次阅读

    harmony-utils之JSONUtil,JSON工具

    ,致力于助力开发者迅速构建鸿蒙应用。其封装工具涵盖了APP、设备、屏幕、授权、通知、线程间通信、弹框、吐司、生物认证、用户首选项、拍照、相
    的头像 发表于 07-03 18:21 ?199次阅读

    harmony-utils之LocationUtil,定位相关工具

    实用工具,致力于助力开发者迅速构建鸿蒙应用。其封装工具涵盖了APP、设备、屏幕、授权、通知、
    的头像 发表于 07-03 18:13 ?196次阅读

    harmony-utils之LogUtil,日志工具

    ,致力于助力开发者迅速构建鸿蒙应用。其封装工具涵盖了APP、设备、屏幕、授权、通知、线程间通信、弹框、吐司、生物认证、用户首选项、拍照、相
    的头像 发表于 07-03 18:12 ?204次阅读

    harmony-utils之PreferencesUtil,首选项工具

    ,借助众多实用工具,致力于助力开发者迅速构建鸿蒙应用。其封装工具涵盖了APP、设备、屏幕、授
    的头像 发表于 07-03 11:42 ?171次阅读

    harmony-utils之PreviewUtil,文件预览工具

    实用工具,致力于助力开发者迅速构建鸿蒙应用。其封装工具涵盖了APP、设备、屏幕、授权、通知、
    的头像 发表于 07-03 11:40 ?172次阅读

    harmony-utils之StrUtil,字符串工具

    ,致力于助力开发者迅速构建鸿蒙应用。其封装工具涵盖了APP、设备、屏幕、授权、通知、线程间通信、弹框、吐司、生物认证、用户首选项、拍照、相
    的头像 发表于 07-03 11:32 ?145次阅读

    harmony-utils之TypeUtil,类型检查工具

    实用工具,致力于助力开发者迅速构建鸿蒙应用。其封装工具涵盖了APP、设备、屏幕、授权、通知、
    的头像 发表于 06-30 17:35 ?165次阅读