开始
最近公司和华为签署了合作协议,也就是纯血鸿蒙,我们之前用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模型开发指导