八、鸿蒙开发-网络请求、应用级状态管理
提示:本文根据b站尚硅谷2024最新鸿蒙开发HarmonyOS4.0+鸿蒙NEXT星河版零基础教程课整理
链接指引 => 尚硅谷2024最新鸿蒙开发HarmonyOS4.0+鸿蒙NEXT星河版零基础教程
文章目录
- 一、网络请求
- 1.1 申请网络访问权限
- 1.2 安装axios库
- 1.2.1 配置环境变量
- 1.2.2 第二步:配置环境变量
- 1.3 安装axios
- 1.3 axios快速入门
- 1.4 axios拦截器
- 二、应用级状态管理
- 2.1 LocalStorage
- 2.2 AppStorage
- 2.3 PersistentStorage
一、网络请求
鸿蒙系统提供了http
模块用于发送http
请求,另外,OpenHarmony
社区基于该模块将前端开发中常用的网络请求库axios
移植到了鸿蒙系统,因此我们也可以在鸿蒙系统中使用axios
发送http
请求,下面重点为大家介绍axios
的用法。
1.1 申请网络访问权限
默认情况下,应用只能访问有限的系统资源,若应用需要访问一些受保护的数据(照片、通讯录、位置等)或者功能(打电话、发短信、联网等),需要先申请相应的权限。鸿蒙系统的权限列表可参考官方文档。
权限的申请可分为如下两步
第一步:声明所需权限
开发者需要在entry/src/main/module.json5
文件中声明所需权限,具体格式如下
{"module": {......"requestPermissions": [{"name": 'ohos.permission.******'}]}
}
第二步:申请授权
- 如果目标权限的
授权方式
为system_grant
,开发者在完成第一步后,系统会在安装应用时自动为其进行权限预授予,开发者不需要做其他操作即可使用权限。 - 如果目标权限的
授权方式
为是user_grant
,开发者在完成第一步后,还需要在应用运行时弹窗请求用户授权,具体操作可参考官方文档。
由于网络访问权限的授权方式为system_grant
,因此只需完成第一步即可,具体内容如下
{"module": {......"requestPermissions": [{"name": 'ohos.permission.INTERNET'}]}
}
1.2 安装axios库
axios
相当于鸿蒙应用项目的一个第三方库,鸿蒙应用项目使用ohpm
管理(包括安装、卸载等)第三方库。除了axios
,还有很多其他的第三方库可供开发者使用,所有的第三方库都收录在链接中。
1.2.1 配置环境变量
为方便执行ohpm
命令,需先将ohpm
的安装目录添加到操作系统的Path
环境变量下,具体操作如下
第一步:查看ohpm
安装目录
打开Deveco Studio
设置界面,搜索ohpm
1.2.2 第二步:配置环境变量
将上述目录添加到Path
环境变量
完成上述环境变量的配置之后,便可在任意目录下执行ohpm
命令了。
1.3 安装axios
点击Deveco Studio
底部的Terminal
选项卡,启动终端
之后在终端执行如下命令即可
ohpm i @ohos/axios
1.3 axios快速入门
第一步:导入axios
import axios from '@ohos/axios'
第二步:创建axios实例
const instance = axios.create({baseURL: 'http://<ip>:<port>',timeout: 2000
})
注意:需要根据实际情况替换上述的ip地址和端口号
第三步:发送http请求
创建axios
实例后,便可通过该实例的api
来发送各种http
请求,常用的api
定义如下
api | 功能 |
---|---|
get(url, config?): Promise | 发送GET请求 |
delete(url, config?): Promise | 发送DELETE请求 |
post(url, data?, config?): Promise | 发送POST请求 |
put(url, data?, config?): Promise | 发送PUT请求 |
第四步:获取请求结果
上述api
的返回值类型均为Promise
,Promise
是JavaScript
中用于表示异步操作结果的对象,若操作成功,其中会包含具体结果,若操作失败,其会包含错误的原因。在实际应用中,开发者可以通过该对象的then()
方法来处理操作成功时的结果,通过catch()
方法来处理操作失败的情况,例如
get(...).then((response:AxiosResponse)=>{//处理请求成功的结果...}).catch((error:AxiosError)=>{//处理请求失败的错误...})
AxiosResponse
是axios
定义的响应结果类型,默认情况下,通过axios
发送的所有请求,其成功的响应结果都是该类型。其包含的属性如下
{//服务器返回的响应结果data: {},//服务器响应的 HTTP 状态码status: 200,//服务器响应的 HTTP 状态信息statusText: 'OK',// 服务器响应头headers: {},//axios请求的配置信息config: {},//生成此响应的请求信息request: {}
}
因此,response.data
才是服务器返回的真实数据,具体处理逻辑如下
get(...).then((response:AxiosResponse)=>{//获取服务器返回的数据let data = response.data;//处理服务器返回的数据...}).catch((error:AxiosError)=>{//处理请求失败的错误...})
1.4 axios拦截器
axios
可以分别为请求和响应配置拦截器,请求拦截器可在请求发送前进行拦截,响应拦截器可以在then()
或者catch()
方法执行前进行拦截,如下图所示
在拦截器中,开发者可以对请求的参数或者响应的结果做一些统一的处理,比如在请求拦截器中统一为所有请求增加token
这一Header
,在响应拦截器中统一处理错误响应。
拦截器的配置方式如下
请求拦截器
// 添加请求拦截器
instance.interceptors.request.use((config:InternalAxiosRequestConfig) => {// 对请求数据做点什么return config;
}, (error:AxiosError) => {// 对请求错误做些什么return Promise.reject(error);
});
响应拦截器
// 添加响应拦截器
instance.interceptors.response.use((response:AxiosResponse)=> {// 对响应数据做点什么return response;
}, (error:AxiosError)=> {// 对响应错误做点什么return Promise.reject(error);
});
二、应用级状态管理
第5章为大家介绍了一系列状态共享相关的装饰器(@State
、@Prop
、@Link
、@Provide
、@Consume
等),但是这些装饰器仅能在两个组件之间共享状态,如果开发者需要在一个页面内的所有组件中共享状态,或者是在多个页面之间共享状态,这些装饰器便不再适用了,此时我们需要的就是应用级状态管理功能。
2.1 LocalStorage
LocalStorage
用于存储页面级的状态数据,位于LocalStorage
中的状态数据可以在一个页面内的所有组件中共享,其用法如下
第一步:创建LocalStorage
实例,并初始化状态变量
let storage = new LocalStorage({ count: 0 });
第二步:将LocalStorage实例绑定到页面的入口组件
@Entry(storage)
@Component
struct Parent {build(){......}
}
第三步:在页面内的组件访问LocalStorage
ArkTs
提供了两个装饰器用于访问LocalStorage
,分别是@LocalStorageProp
和@LocalStorageLink
,前者可以和LocalStorage
实现单向同步,后者可以和LocalStorage
实现双向同步,具体用法如下
父组件
let storage = new LocalStorage({ count: 0 });@Entry(storage)
@Component
struct Parent {//与storage中的count属性双向同步@LocalStorageLink('count') count: number = 0;build(){Child()}
}
子组件
@Component
struct Child {//与storage中的count属性单向同步@LocalStorageProp('count') count: number = 0;build(){...}
}
2.2 AppStorage
AppStorage
用于存储应用级的状态数据,位于AppStorage
中的状态数据可以在整个应用的所有组件中共享,其用法如下
第一步:初始化状态变量
AppStorage.SetOrCreate('count', 0)
第二步:在整个应用内的组件中访问AppStorage
ArkTs
提供了两个装饰器用于访问AppStorage
实例,分别是@StorageProp
和@StorageLink
,前者可以和AppStorage
实现单向同步,后者可以和AppStorage
实现双向同步,具体用法如下
PageOne
AppStorage.SetOrCreate('count', 0)@Entry
@Component
struct PageOne {//与AppStorage中的count属性双向同步@StorageLink('count') count: number = 0;build(){...}
}
PageTwo
@Entry
@Component
struct PageTwo {//与AppStorage中的count属性单向同步@StorageProp('count') count: number = 0;build(){...}
}
2.3 PersistentStorage
LocalStorage
和AppStorage
都是将状态数据保存在内存中,应用一旦退出,数据就会被清理,如果需要对数据进行持久化存储,就需要用到PersistentStorage
,其用法如下
PersistentStorage
可以将指定的AppStorage
中的属性保存到磁盘中,并且PersistentStorage
和AppStorage
的该属性会自动建立双向同步,开发者不能直接访问PersistentStorage
中的属性,而只能通过AppStorage
进行访问,具体操作如下
PersistentStorage.PersistProp('count', 0);@Entry
@Component
struct Index {@StorageLink('count') count: number = 0build() {Row() {Column() {// 应用退出时会保存当前结果。重新启动后,会显示上一次的保存结果Text(`${this.count}`).onClick(() => {this.count += 1;})}}}
}
相关文章:
八、鸿蒙开发-网络请求、应用级状态管理
提示:本文根据b站尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程课整理 链接指引 > 尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程 文章目录 一、网络请求1.1 申请网络访问权限1.2 安装axios库1.2.1 配置环境变量1.2.2 第二步&…...
经验笔记:Git 中的远程仓库链接及上下游关系管理
Git 中的远程仓库链接及上下游关系管理 1. 远程仓库的链接信息 当你克隆一个远程仓库时,Git 会在本地仓库中记录远程仓库的信息。这些信息包括远程仓库的 URL、默认的远程名称(通常是 origin),以及远程仓库中的所有分支和标签。…...
Paint 学习笔记
目录 ippaint 外扩对象 LCM_inpaint_Outpaint_Comfy: 不支持文字引导 ippaint https://github.com/Sanster/IOPaint 外扩对象 https://www.iopaint.com/models/diffusion/powerpaint_v2 GitHub - open-mmlab/PowerPaint: [ECCV 2024] PowerPaint, a versatile …...
Jenkins修改LOGO
重启看的LOGO和登录页面左上角的LOGO 进入LOGO存在的目录 [roottest-server01 svgs]# pwd /opt/jenkins_data/war/images/svgs [roottest-server01 svgs]# ll logo.svg -rw-r--r-- 1 jenkins jenkins 29819 Oct 21 10:58 logo.svg #jenkins_data目录是我挂载到了/opt目录&…...
kafka是如何做到高效读写
消息持久化: Kafka 将消息存储在磁盘上,并且通过顺序写入的方式提高写入性能。 消息被追加到日志文件的尾部,避免了随机写操作,从而提高了写入速度。零拷贝技术:利用操作系统的零拷贝特性,数据可以从磁盘直…...
Intern大模型训练营(九):XTuner 微调实践微调
本节课程的视频和教程都相当清晰,尤其是教程,基本只要跟着文档,在开发机上把指令都相同地输出一遍,就可以完成任务(大赞),相当顺利。因此,这里的笔记就不重复赘述步骤,更…...
从一次java.io.StreamCorruptedException: invalid stream header: 48656C6C 错误中学到的调试思路
问题场景: 在项目中,我试图使用 Java 的 ObjectInputStream 反序列化一个对象。代码逻辑看似简单:读取字节流,将其转为 Java 对象。然而,程序抛出了以下异常: java.io.StreamCorruptedException: invalid…...
树莓派的发展历史
树莓派(Raspberry Pi)是由英国的树莓派基金会开发的一系列单板计算机,其目标是为了促进计算机科学教育,同时提供廉价的计算机硬件平台。 1. 诞生背景与初代模型(2006-2012) 背景:树莓派的概念起…...
K8S containerd拉取harbor镜像
前言 接前面的环境 K8S 1.24以后开始启用docker作为CRI,这里用containerd拉取 参考文档 正文 vim /etc/containerd/config.toml #修改内容如下 #sandbox_image "registry.aliyuncs.com/google_containers/pause:3.10" systemd_cgroup true [plugins.…...
Ubuntu 环境下通过 Apt-get 安装软件
操作场景 为提升用户在云服务器上的软件安装效率,减少下载和安装软件的成本,腾讯云提供了 Apt-get 下载源。在 Ubuntu 环境下,用户可通过 Apt-get 快速安装软件。对于 Apt-get 下载源,不需要添加软件源,可以直接安装软…...
vue使用List.forEach遍历集合元素
需要遍历集合对其每个元素进行操作时,可以使用forEach方法 1.语法:集合.forEach ( 定义每一项 > 定义每一项都要进行的逻辑 ) 2、使用场景: //例如需要给每个员工的工资数量加1000this.personList.forEach(item>item.salary100…...
ROM修改进阶教程------安卓14去除修改系统应用后导致的卡logo验证步骤 适用安卓13 14 安卓15可借鉴参考
上期的博文解析了安卓14 安卓15去除系统应用签名验证的步骤解析。我们要明白。修改系统应用后有那些验证。其中签名验证 去卡logo验证 与可降级安装应用验证等等的区别。有些要相互结合使用。今天的博文将对修改系统应用后卡logo验证做个步骤解析。 通过博文了解💝💝�…...
苹果macbook,MacOS 11,12,13,14,15 跳过监管锁(配置锁)
第一步:进入恢复模式 长按电源键关机,再长按开机进入恢复模式。(M,Intel芯片方法不同) 第二步:复制代码 右上角联网,打开Safari,地址栏输入http://i7q.cn/61NWfQ。复制以下命令&am…...
【YOLOv8】安卓端部署-2-项目实战
文章目录 1 准备Android项目文件1.1 解压文件1.2 放置ncnn模型文件1.3 放置ncnn和opencv的android文件1.4 修改CMakeLists.txt文件 2 手机连接电脑并编译软件2.1 编译软件2.2 更新配置及布局2.3 编译2.4 连接手机 3 自己数据集训练模型的部署4 参考 1 准备Android项目文件 1.1…...
第二十四章 Spring之源码阅读——AOP篇
Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…...
Linux配置MySQL自动备份
Linux配置MySQL自动备份 配置MySQL的自动备份首先要编辑一个备份脚本然后配置开启Linux定时任务即可,下面是具体配置 1、配置备份脚本并测试执行 1.1 编写备份脚本 #这里创建脚本名为mysql_backups.sh mkdir ~/mysqlmulu touch ~/mysqlmulu/mysql_backups.sh#!/…...
qt 之 QDockWidget设置不可拖动
在Qt中,可以通过设置QDockWidget的属性来禁止它被拖动。你可以使用QDockWidget::setFeatures方法并传递QDockWidget::DockWidgetMovable作为参数来禁用拖动功能。 以下是一个简单的示例代码,展示了如何设置QDockWidget为不可拖动: #include …...
【Java知识】Java性能测试工具JMeter
一文带你了解什么是JMeter 概述JMeter的主要功能:JMeter的工作原理:JMeter的应用场景:JMeter的组件介绍: 实践说明JMeter实践基本步骤:JMeter实践关键点: JMeter支持哪些参数化技术?常见插件及其…...
Git 安装
一、下载安装包 Git官网 https://git-scm.com/ Git 阿里镜像 二、安装 点击安装包运行,基本上一路 next 就行。 使用许可声明 选择安装目录 选择组件,默认勾选就行 选择开始菜单文件夹,默认就行 选择 Git 的默认编译器,默认 V…...
【Python】FastAPI:Token认证
FastAPI:Token认证 本教程通过 FastAPI 实现用户登录和基于 JWT(JSON Web Token) 的认证与授权,适合初学者到进阶用户。教程特别关注 Depends、OAuth2PasswordBearer 等非基础操作的详细讲解,帮助你全面掌握相关技术。…...
【FAQ】HarmonyOS SDK 闭源开放能力 —ArkUI
1.问题描述: App启动的时候会有个弹框,询问用户是否需要进去隐私模式,在该隐私模式下,App不能获取任何用户信息。当前鸿蒙App级别是否有隐私模式? 解决方案: 当前实现隐私模式都是三方应用自己实现&…...
ubuntu没有了有线网络如何修复
今天打开ubuntu之后发现有线网络连接没有了,如下图,此时是修复好之后的,“有线”部分存在,出现问题时是不存在的 此时只需要修改NetworkManager.conf配置文件,将managedfalse更改为managedtrue,保存退出就可以了 sudo…...
渗透学习之windows基础
引路Windows基础之病毒编写(完结)_哔哩哔哩_bilibili windows基础(2) 21 ftp 23 tenlet 80 web 80-89 可能是web 443 ssl心脏滴血漏洞以及一些web漏洞测试 445 smb 1433 msspl 1521 oracle 2082/2083 cpanel 主机管理系…...
【Swift】运算符
文章目录 术语赋值运算符算数运算符基本四则算术运算符求余运算符一元负号运算符一元正号运算符 比较运算符三元运算符空合运算符区间运算符闭区间运算符半开区间运算符单侧区间运算符 逻辑运算符逻辑非运算符逻辑与运算符逻辑或运算符逻辑运算符组合计算 位运算符运算符优先级…...
minikube start --driver=docker 指定国内镜像
要在Ubuntu 22上使用Minikube并指定国内镜像,你可以根据以下步骤操作: 安装Minikube: 你可以通过阿里云提供的国内源来安装Minikube,这样可以避免访问国外源的问题。使用以下命令安装Minikube: curl -Lo minikube http…...
Quality minus junk论文阅读
Quality minus junk论文阅读 文章目录 Quality minus junk论文阅读 AbstractTheoretical FrameworkEmpirical AnalysisDataQuality scorePortfoliosEx ante quality forecasts fundamentals Results and DiscussionThe price of qualityUnderstanding the price of quality: th…...
Apache和HTTPS证书的生成与安装
摘要 介绍linux系统下使用openssl生成https证书,并将证书安装在apache服务器上,最终实现通过https访问服务器。这个过程涉及到openssl生成自签名证书(适用于测试环境),修改apache配置,开放防火墙https端口…...
前端—Cursor编辑器
在当今快速发展的软件开发领域,效率和质量是衡量一个工具是否优秀的两个关键指标。今天,我要向大家推荐一款革命性的代码编辑器——Cursor,它集成了强大的AI功能,旨在提高开发者的编程效率。以下是Cursor编辑器的详细介绍和推荐理…...
【数据结构】【线性表】【练习】删除链表倒数第n个结点
目录 申明 题目 分析题目信息 解题思路 代码解析 技巧解析:创建虚拟头结点 时间复杂度分析 思考:能否只用一趟扫描实现? 双指针 双指针解题思路 代码解析 申明 该题源自力扣题库19,文章内容(代码,…...
MySQL高级(四):索引
基础概念 什么是索引? 索引是一种数据结构,用于加速查询的过程。它类似于书本的目录,可以快速定位数据行。MySQL 索引主要是基于 B 树(也有其他类型如哈希索引、全文索引等)来实现的。 为什么使用索引? …...
怎么做体育直播网站/前端性能优化
以下列出mysql函数的使用,并不完全,涉及到多少写多少。length(str):返回字符串(str)的字符长度。一个汉字算三个字符,一个数字或字母算一个字符。select length(测试); --6select length(123abc); --6char_length(str):…...
wordpress反代cdn/互联网精准营销
前言:前段时间接触了这个vi编辑器,第一次用也是一脸懵比,花点时间学习了下基本操作,用惯了图形界面感觉还是挺新颖的。 简介:vi编辑器是所有Unix及Linux系统下标准的编辑器,对Unix及Linux系统的任何版本&a…...
政府网站建设背景说明/网上卖货的平台有哪些
2019独角兽企业重金招聘Python工程师标准>>> 场景:在B/S结构的系统中,有时客户端需要实时的获得服务器反馈的消息,但是HTTP协议只支持请求响应模式,所以我们经常通过轮询(polling)、长轮询(Long polling)、长连接、Web…...
阿里爸爸网站建设策划书/免费seo视频教学
日前,我司 CTO 黄东旭接受了即将开幕的 WOT2018 全球软件与运维技术峰会记者的采访,介绍了 TiDB 作为 HTAP 数据库的技术思考及应用情况,以及 PingCAP 自创立以来对开源的一些心得,以下是报道原文。Enjoy~作者…...
做进出口外贸网站/关键词全网指数查询
如果有一天,你打开手机,发现显示时间与真实时间相差一刻钟左右,你会做什么?你会想到穿越吗?如果你想太久,可能会错过早晨通勤车,被早高峰堵住,因而迟到。这件事发生在北京10月12日晚…...
怎样做网站推广啊/关键词优化哪家强
概念 算法:任何一个良定义的计算过程,该过程取某个值或者值的集合作为输入并产生某个值或值的集合作为输出。这是比较概念化的定义,我们来分析一下,算法到底是什么,比如有一个问题:计算1到10所有整数的和&…...