HarmonyOS NEXT 实战系列10-网络通信

简介: 本文介绍了网络通信相关知识,包括HTTP协议的工作原理、鸿蒙系统中HTTP模块的使用方法、Promise异步操作处理机制及async/await语法糖的应用,以及JSON数据格式的语法规则与转换方法。重点讲解了HTTP请求响应流程、鸿蒙开发中的网络权限申请与代码实现、Promise三种状态及创建方式,并通过示例说明异步编程技巧和JSON在数据传递中的应用。
  1. 网络通信-http协议
    HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同,用于客户端和服务器之间的通信。

HTTP 协议规定,请求从客户端发出,最后服务器端响应该请求并返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有接收到请求之前不会发送响应。

请求报文是由请求方法、请求 URI、协议版本、可选的请求首部字段和内容实体构成的。

常见方法:GET 查询、POST 提交、PUT 修改、DELETE 删除

响应报文基本上由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。

鸿蒙操作系统提供了网络通信相关的 API 和服务,其中包括支持 HTTP 协议的数据请求功能,允许开发者在其应用程序中执行 HTTP 请求。

  1. 网络通信-http模块
    HTTP数据请求功能主要由http模块提供,使用该功能需要申请ohos.permission.INTERNET权限。

开发步骤:

调用 http.createHttp() 方法,创建一个 HttpRequest 对象。
调用该对象的 request() 方法,传入 http 请求的 url 地址和可选参数,发起网络请求。
按照实际业务需要,解析返回结果。
当该请求使用完毕时,调用 destroy() 方法主动销毁。
参考代码:

module.json5 文件开启网络权限
"requestPermissions": [
{ "name": "ohos.permission.INTERNET" }
],
Index.ets 文件
aboutToAppear(): void {
this.getData()
}

getData() {
// 1. 创建 http 实例
const httpInstance = http.createHttp()
// 2. 发起网络请求
httpInstance.request('https://hmajax.itheima.net/api/news')
.then(res => {
// 3.1 成功,处理请求结果
console.log('success', res.result.toString())
})
.catch((err: Error) => {
// 3.2 失败
console.log('error', err.message)
})
.finally(() => {
// 4. 销毁实例
httpInstance.destroy()
})
}

  1. 网络通信-Promise
    Promise是一种用于处理异步操作的对象,可以将异步操作转换为类似于同步操作的风格,以方便代码编写和维护。

Promise 3 种状态:

待定(pending): 初始状态,既没有被兑现,也没有被拒绝
已兑现(fullfilled): 代表操作成功
已拒绝(rejected): 代表操作失败
创建 Promise 方式:

const p = new Promise((resolve, reject) => {
setTimeout(() => {
// 5s 执行成功
resolve('success')
}, 5000)
// 或者失败
// reject('err')
})

p.then(res => {
console.log('res:', res)
})
.catch((err: string) => {
console.log('err:', err)
})
Promise.resolve('成功')
.then(res => {
// 成功
})
Promise.reject('拒绝')
.catch((err: string) => {
// 拒绝
})

  1. 网络通信-异步编程
    async/await是一种用于处理异步操作的Promise语法糖,使得编写异步代码变得更加简单和易读。通过使用async关键字声明一个函数为异步函数,并使用await关键字等待Promise的解析(完成或拒绝),以同步的方式编写异步操作的代码。

核心步骤:

async 修饰函数
await 等待成功(Promise 对象)
async function func() {
// await 获取到的是 之后 Promise 对象的成功结果
const res1 = await Promise对象1
const res2 = await Promise对象2
const res3 = await Promise对象3
}
func()
简单例子:假设获取到数据A需要2秒,获取数据B需要3秒,B数据需要等A数据获取成功后才能获取

function getA() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('A')
}, 2000)
})
}

function getB() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('B')
}, 3000)
})
}

async function getData() {
const a = await getA()
console.log('数据', a)
const b = await getB()
console.log('数据', a)
}

getData()

  1. 网络通信-JSON数据
    JSON 是一种按照 JavaScript 对象语法的数据格式,虽然它是基于 JavaScript 语法,但它独立于 JavaScript。一般应用于网络数据传递、属性储存、配置文件等。

语法规则:

是一个字符串(配置文件中两边可以不写引号)
属性名用双引号包裹
属性值如果是字符串也必须用双引号包裹
对象 {},数组 []
const userStr = '{"name":"Jack","age":18}'
const arrStr = '["你好","世界"]'
转换语法:

interface User{
name:string
age:number
}

const userStr = '{"name":"Jack","age":18}'
// 转对象
const user = JSON.parse(userStr) as User
user.age = 20
// 转JSON
const newUserStr = JSON.stringify(user)
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/zsgzsgzsgzsgzsg/article/details/146199555

相关文章
|
23天前
|
监控 JavaScript 编译器
从“天书”到源码:HarmonyOS NEXT 崩溃堆栈解析实战指南
本文详解如何利用 hiAppEvent 监控并获取 sourcemap、debug so 等核心产物,剖析了 hstack 工具如何将混淆的 Native 与 ArkTS 堆栈还原为源码,助力开发者掌握异常分析方法,提升应用稳定性。
327 36
|
2月前
|
开发者 容器
鸿蒙应用开发从入门到实战(十四):ArkUI组件Column&Row&线性布局
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解Column和Row组件的使用以及线性布局的方法。
253 12
|
1月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
1月前
|
监控 Linux 测试技术
C++零拷贝网络编程实战:从理论到生产环境的性能优化之路
🌟 蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕C++与零拷贝网络编程,从sendfile到DPDK,实战优化服务器性能,毫秒级响应、CPU降60%。分享架构思维,共探代码星辰大海!
|
2月前
|
API 数据处理
鸿蒙应用开发从入门到实战(十三):ArkUI组件Slider&Progress
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解滑块Slider和进度条Progress组件的使用。
144 1
|
24天前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
159 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
30天前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
222 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
1月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
477 3
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
数据安全/隐私保护 开发者
鸿蒙应用开发从入门到实战(十一):ArkUI组件Text&TextInput
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文主要讲解文本组件Text和TextInput的使用。
248 3
|
29天前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
100 0

热门文章

最新文章