news 2026/6/9 21:26:14

【鸿蒙开发实战】HarmonyOS网络请求简化示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【鸿蒙开发实战】HarmonyOS网络请求简化示例

使用说明

  1. 创建文件

    • entry/src/main/ets/pages/目录下创建NetworkDemo.ets

    • 或者直接替换现有页面的代码

  2. 配置权限

    • module.json5中添加网络权限(如上所示)

  3. 运行应用

    • 点击"测试GET请求"按钮发送HTTP请求

    • 点击"检查网络状态"测试网络连通性

    • 点击"清除数据"清空显示内容

核心功能说明

  1. 网络请求:使用@ohos.net.http模块发送HTTP GET请求

  2. 状态管理:使用@State装饰器管理UI状态

  3. 异步处理:使用async/await处理异步网络请求

  4. 错误处理:完整的异常捕获和处理机制

  5. UI反馈:加载状态提示和结果显示

部分代码

// NetworkDemo.ets - HarmonyOS网络功能示例 import http from '@ohos.net.http'; import common from '@ohos.app.ability.common'; import { BusinessError } from '@ohos.base'; // 定义Http请求选项的接口 interface HttpRequestOptions { method: http.RequestMethod; header?: Record<string, string>; connectTimeout?: number; readTimeout?: number; extraData?: string | Object; } // 定义API响应数据结构 interface ApiResponse { userId: number; id: number; title: string; body: string; } // 定义错误信息数据结构 interface ErrorInfo { code?: number; message?: string; stack?: string; name?: string; } @Entry @Component struct NetworkDemo { @State message: string = '点击按钮测试网络连接'; @State responseData: string = ''; @State isConnected: boolean = false; // 获取Ability上下文 private context = getContext(this) as common.UIAbilityContext; build() { Column({ space: 20 }) { // 显示状态信息 Text(this.message) .fontSize(20) .fontColor(Color.Blue) .margin({ top: 30 }) // 显示连接状态 Text(this.isConnected ? '网络已连接' : '网络未连接') .fontSize(18) .fontColor(this.isConnected ? Color.Green : Color.Red) // 显示响应数据 Scroll() { Text(this.responseData) .fontSize(14) .textAlign(TextAlign.Start) .padding(10) } .height(200) .width('90%') .border({ width: 1, color: Color.Gray }) // 功能按钮区域 Column({ space: 15 }) { // 测试GET请求 Button('测试GET请求') .width('80%') .height(40) .onClick(() => { this.testGetRequest(); }) // 测试连接状态 Button('检查网络状态') .width('80%') .height(40) .onClick(() => { this.checkNetworkStatus(); }) // 清除数据 Button('清除数据') .width('80%') .height(40) .onClick(() => { this.clearData(); }) } .width('100%') .margin({ top: 20 }) // 进度指示器 LoadingProgress() .color(Color.Blue) .visibility(this.message.includes('请求中') ? Visibility.Visible : Visibility.Hidden) } .width('100%') .height('100%') .padding(20) .justifyContent(FlexAlign.Start) } // 测试GET请求 private async testGetRequest() { this.message = '正在发送请求...'; this.responseData = ''; try { // 创建HTTP请求 let httpRequest = http.createHttp(); // 设置请求参数 - 使用明确定义的类型 let url = 'https://jsonplaceholder.typicode.com/posts/1'; // 免费测试API let options: HttpRequestOptions = { method: http.RequestMethod.GET, header: { 'Content-Type': 'application/json' }, connectTimeout: 60000, readTimeout: 60000 }; // 发送请求 let response = await httpRequest.request(url, options); // 检查响应状态 if (response.responseCode === 200) { this.message = '请求成功!'; this.isConnected = true; // 安全地处理响应数据 try { const result = response.result as string; const parsedData: ApiResponse = JSON.parse(result) as ApiResponse; this.responseData = JSON.stringify(parsedData, null, 2); } catch (parseError) { this.responseData = response.result as string; } } else { this.message = `请求失败: ${response.responseCode}`; this.isConnected = false; this.responseData = response.result ? response.result as string : '无响应数据'; } // 释放资源 httpRequest.destroy(); } catch (error) { // 使用BusinessError类型处理错误 const businessError = error as BusinessError; this.message = `请求异常: ${businessError.message || '未知错误'}`; this.isConnected = false; // 安全地序列化错误对象 - 使用明确定义的类型 try { const errorObj: ErrorInfo = { code: businessError.code, message: businessError.message, stack: businessError.stack, name: 'BusinessError' }; this.responseData = JSON.stringify(errorObj, null, 2); } catch (stringifyError) { const stringifyErr = stringifyError as Error; this.responseData = `错误信息: ${businessError.message || '未知错误'}\n序列化错误: ${stringifyErr.message}`; } } } // 检查网络状态 private async checkNetworkStatus() { try { // 简单的连接性检查 let httpRequest = http.createHttp(); // 使用明确定义的类型 let options: HttpRequestOptions = { method: http.RequestMethod.GET, connectTimeout: 5000 }; await httpRequest.request('https://www.baidu.com', options); this.message = '网络连接正常'; this.isConnected = true; httpRequest.destroy(); } catch (error) { const businessError = error as BusinessError; this.message = `网络连接失败: ${businessError.message || '请检查网络设置'}`; this.isConnected = false; } } // 清除数据 private clearData() { this.responseData = ''; this.message = '数据已清除,点击按钮测试网络'; } }

入门鸿蒙开发又怕花冤枉钱?别错过!现在能免费系统学 -- 从 ArkTS 面向对象核心的类和对象、继承多态,到吃透鸿蒙开发关键技能,还能冲刺鸿蒙基础 +高级开发者证书,更惊喜的是考证成功还送好礼!快加入我的鸿蒙班,一起从入门到精通,班级链接:点击https://developer.huawei.com/consumer/cn/training/classDetail/b7365031334e4353a9a0fd6785bb0791?type=1?ha_source=hmosclass&ha_sourceId=89000248免费进入

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 20:21:28

零基础掌握WinDbg在x86平台的双机调试连接配置流程

从零开始&#xff1a;手把手教你配置 WinDbg x86 双机调试环境你有没有遇到过这样的场景&#xff1f;系统刚启动到一半&#xff0c;突然蓝屏死机&#xff08;BSOD&#xff09;&#xff0c;错误代码一闪而过&#xff0c;日志里查不到线索&#xff1b;或者自己写的驱动一加载就崩…

作者头像 李华
网站建设 2026/6/8 20:03:39

【科研绘图系列】R语言绘制人口变迁散点图(scatter plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍 加载R包 导入数据 画图 总结 系统信息 介绍 美国作为全球主要移民目的地和第三人口大国,其人口增长历程是研究现代国家发展的经典案例。这张涵盖1900年至2025年的折线图,通过简…

作者头像 李华
网站建设 2026/6/9 19:52:28

35、微分几何与非线性系统线性化:理论、方法与应用

微分几何与非线性系统线性化:理论、方法与应用 1. 魏 - 诺曼公式与问题转换 魏 - 诺曼公式将李群上的微分方程问题转化为 $\mathbb{R}^n$ 中的问题。它把从初始配置 $g_i$ 到最终配置 $g_f$ 的控制问题,转换为从 $\mathbb{R}^n$ 中的向量 $y(0)$ 到 $y(1)$ 的控制问题。这一…

作者头像 李华
网站建设 2026/6/9 20:57:54

50、控制中的外微分系统详解

控制中的外微分系统详解 1. 外代数中的相关计算与定理 在进行外代数相关内容探讨时,首先对表达式 (v \rfloor \alpha^4 \in I_E) 进行计算。 - 计算过程 : - (v \rfloor \alpha^4 = (v \rfloor (\theta^1 \wedge \theta^2)) \wedge \beta^5 + (-1)^2(\theta^1 \wedge \…

作者头像 李华
网站建设 2026/6/9 19:52:34

泛函分析与偏微分方程(四):弱拓扑的三个基本性质

无穷维赋范线性空间中弱拓扑的三个基本性质 以下三个命题是泛函分析中的经典结果,深刻揭示了无穷维空间中弱拓扑与范数拓扑的本质差异。 命题一:单位开球在弱拓扑下不是开集 命题:设 XXX 是一个无穷维赋范线性空间,B={ x∈X:∥x∥<1}B = \{x \in X : \|x\| < 1\}B…

作者头像 李华
网站建设 2026/6/8 19:57:13

USB3.0接口定义引脚说明与PCB层叠结构对信号完整性影响分析

USB3.0高速设计实战&#xff1a;从引脚定义到PCB叠层的信号完整性攻防战你有没有遇到过这样的情况&#xff1f;USB3.0接口焊好了&#xff0c;设备也能识别&#xff0c;但一跑高速传输就丢包、误码&#xff0c;甚至直接降级到USB2.0模式。示波器一看眼图——闭得比没睡醒还紧。别…

作者头像 李华