【纯血鸿蒙】之用户首选项

开始

最近公司和华为签署了合作协议,也就是纯血鸿蒙,我们之前用api9也零零散散写了点东西,发现鸿蒙真的是让各个端都爽了下又没爽够,此处省略一万句。。。。

纯血鸿蒙

所谓纯血鸿蒙,即HarmonyOS NEXT鸿蒙星河版将正式开启Beta,星河版其实就是大家常说的“纯血”鸿蒙,该系统底座全栈自研,去除掉安卓底层代码,不支持打开安卓系统应用,仅支持鸿蒙内核和鸿蒙系统的应用。

开发环境

  • Windows

  • DevEco Studio NEXT Developer Preview2

  • HarmonyOS next Developer Preview2

  • java version “11.0.18” 2023-01-17 LTS

  • hdc 1.2.0a

  • 手机:Mate 60Pro (HarmonyOS NEXT Developer Preview2)

HarmonyOS 中的首选项

大家都知道安卓中有共享首选项SharedPreferences,鸿蒙也有ohos.data.preferences (用户首选项),官方是这么对他解释的:用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。接下来我们看看怎么对他使用

使用ohos.data.preferences(用户首选项)

这里有个小坑:api9之前是没有同步的,每次获取数据时候都要 async await一下,非常的不方便,特别是在设置公共参数真的是大坑! 直接上代码:首先定义一个全局的data.preferences(以最新文档同步为例,不用async await),其实name就相当于数据库名称

static getInstance() {
  try {
    let options: dataPreferences.Options = {
      name: 'TestPreferences',    //name:Preferences实例的名称。  dataGroupId
      dataGroupId: ''  // dataGroupId:应用组ID,需要向应用市场获取。为可选参数。指定在此dataGroupId  对应的沙箱路径下创建Preferences实例。当此参数不填时,默认在本应用沙箱目录下创建Preferences实例。
    };
    preference = dataPreferences.getPreferencesSync(getContext(), options);
  } catch (err) {
    Logger.error(`Failed to get preferences, Cause: ${err}`);
  }
}

存数据:ValueType是一个type类型可以是任意类型的数据,putSync为将数据写入缓存的Preferences实例中,可通过将Preferences实例持久化,此为同步接口,切记一定要flush(),不然不会保存到磁盘,下面的key可以理解成我数据库的其中一个表

static putValue(key: string, value: ValueType) {
  try {
    if (!preference) {
      SPUtils.getInstance();
    }
    try {
      preference.putSync(key, value);
    } catch (err) {
      Logger.error(`Failed to put value, Cause: ${err}`);
    }
    preference.flush();
  } catch (err) {
    Logger.error(`Failed to get preferences, Cause: ${err}`);
  }
}

获取数据:从缓存的Preferences实例中获取键对应的值,如果值为null或者非默认值类型,返回默认数据defValue,此为同步接口,建议这个只获取基本类型的数据,因为后面我单独写了个获取对象的方法

/**
 * 获取基本类型
 * @param key
 * @param defaultValue
 * @returns
 */
static getValue(key: string, defaultValue: ValueType = "") {
  let value: string = '';
  if (!preference) {
    SPUtils.getInstance();
  }
  try {
    value = (preference.getSync(key, defaultValue)).toString();
  } catch (err) {
    Logger.error(`Failed to get value, Cause: ${err}`);
  }
  return value;
}

获取对象类型数据:其实就是做了下JSON.parse最终返回一个泛型,不说了,直接上代码!

static get<T>(key: string, defaultValue: ValueType = "") {
  let value: T | null = null;
  if (!preference) {
    SPUtils.getInstance();
  }
  try {
    const json = SPUtils.getValue(key, defaultValue)
    if (json) {
      value = JSON.parse(json) as T
    }
  } catch (err) {
    Logger.error(`Failed to get value, Cause: ${err}`);
  }
  return value;
}

下面我单独写操作数据相关的示例(存数组类型):

存数组:
let test = [
new Test({ parms: '66666' }),
new Test({ parms: '7777777' }),
// 添加更多的实例...
] as Test[];
SPUtils.putValue("test", JSON.stringify(test))

获取数组类型:

获取数组:
const testArray = SPUtils.get("test", '') as Test[]
AlertDialog.show({
message: `测试信息:${JSON.stringify(testArray[0].parms + '===' + testArray[1].parms)} `
})

存对象类型:

let test =new Test({ parms: '66666' }) as Test;
SPUtils.putValue("test", JSON.stringify(test))

获取对象:

const info = SPUtils.get("test", '') as Test
AlertDialog.show({
message: `测试信息:${JSON.stringify(info.parms} `

存基本数据类型(string number boolean):

SPUtils.putValue("test", '测试') || SPUtils.putValue("test", 12222) || SPUtils.putValue("test", true)

获取基本数据类型

const info = SPUtils.get("test", '') ||const info = SPUtils.get("test", 0) ||const info = SPUtils.get("test", false) 
AlertDialog.show({
message: `测试信息:${JSON.stringify(info} `
})

移除指定key

static removeValue(key: string) {
  try {
    if (!preference) {
      SPUtils.getInstance();
    }
    try {
      preference.deleteSync(key);
    } catch (err) {
      Logger.error(`Failed to put value, Cause: ${err}`);
    }
    preference.flush();
  } catch (err) {
    Logger.error(`Failed to get preferences, Cause: ${err}`);
  }
}

删除所有数据:

static clearValue() {
  try {
    if (!preference) {
      SPUtils.getInstance();
    }
    try {
      preference.clearSync();
    } catch (err) {
      Logger.error(`Failed to put value, Cause: ${err}`);
    }
    preference.flush();
  } catch (err) {
    Logger.error(`Failed to get preferences, Cause: ${err}`);
  }
}

总结:

好了,就到这了,上面是我简单的写了个用户首选项的基本用法,其实AppStorage也可以用来存取数据,个人比较喜欢用首选项,AppStorage好像有个坑,在EntryAbility里面不能获取数据,不知道华为修复这个bug没,后面我会继续给大家分享系列的鸿蒙相关实战,包括各种踩坑,网络请求封装系列之类的,首页渐变效果,节后见!

怎样学习鸿蒙?

首先必学的是开发语言 ArkTS,这是重中之重,然后就是ArkUI声明式UI开发、Stage模型、网络/数据库管理、分布式应用开发、进程间通信与线程间通信技术、OpenHarmony多媒体技术……。中间还有许多的知识点,都整理成思维导图来分享给大家~
在这里插入图片描述
此外,小编精心准备了一份联合鸿蒙官方发布笔记整理收纳的《鸿蒙开发学习笔记》,内容包含ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

【有需要的小伙伴,可以扫描下方二维码免费领取!!!】

快速入门

  • 开发准备
  • 构建第一个ArkTS应用(Stage模型)
  • 构建第一个ArkTS应用(FA模型)
  • 构建第一个JS应用(FA模型)
    在这里插入图片描述

开发基础知识

  • 应用程序包基础知识
  • 应用配置文件(Stage模型)
  • 应用配置文件概述(FA模型)
    在这里插入图片描述

资源分类与访问

  • 资源分类与访问
  • 创建资源目录和资源文件
  • 资源访问
    在这里插入图片描述

学习ArkTs语言

  • 初识ArkTS语言
  • 基本语法
  • 状态管理
  • 其他状态管理
  • 渲染控制
    在这里插入图片描述

基于ArkTS声明式开发范式

  • UI开发(ArkTS声明式开发范式)概述
  • 开发布局
  • 添加组件
  • 显示图片
  • 使用动画
  • 支持交互事件
  • 性能提升的推荐方法

在这里插入图片描述

兼容JS的类Web开发范式

  • 概述
  • 框架说明
  • 构建用户界面
  • 常见组件开发指导
  • 动效开发指导
  • 自定义组件
    在这里插入图片描述

Web组件

  • 概述
  • 设置基本属性和事件
  • 并发
  • 窗口管理
  • WebGL
  • 媒体
  • 安全
  • 网络与连接
  • 电话服务
  • 数据管理

  • 在这里插入图片描述

应用模型

  • 概述
  • Stage模型开发指导
  • FA模型开发指导
    在这里插入图片描述
2024完整鸿蒙学习资料领取方式:扫描下方二维码即可
  • 49
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值