鸿蒙NEXT开发实战:【网络管理-数据请求】

概述

本示例仿postman输入API接口地址,获取相应数据,介绍数据请求接口的用法。

样例展示

基础信息

image.png

Http

介绍

本示例通过[@ohos.net.http]等接口,实现了根据URL地址和相关配置项发起http请求的功能。

效果预览

首页结果页

使用说明

1.启动应用可配置网络请求,设置网址、请求方式、请求参数;

2.点击确认按钮,跳转请求结果页面;

3.点击返回按钮,返回配置页面;

4.支持将本示例中的http模块编译成tgz包。

具体实现

  • 本示例将发送http请求的接口封装在Http模块,源码参考:[http.ts]
/** Copyright (c) 2022 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/import http from '@ohos.net.http'class Http {url: stringextraData: Objectoptions: http.HttpRequestOptionsconstructor() {this.url = ''this.options = {method: http.RequestMethod.GET,extraData: this.extraData,header: { 'Content-Type': 'application/json' },readTimeout: 50000,connectTimeout: 50000}}setUrl(url: string) {this.url = url}setMethod(method: string) {switch (method) {case 'GET':this.options.method = http.RequestMethod.GET;breakcase 'HEAD':this.options.method = http.RequestMethod.HEAD;breakcase 'OPTIONS':this.options.method = http.RequestMethod.OPTIONS;breakcase 'TRACE':this.options.method = http.RequestMethod.TRACE;breakcase 'DELETE':this.options.method = http.RequestMethod.DELETE;breakcase 'POST':this.options.method = http.RequestMethod.POST;breakcase 'PUT':this.options.method = http.RequestMethod.PUT;breakcase 'CONNECT':this.options.method = http.RequestMethod.CONNECT;breakdefault:this.options.method = http.RequestMethod.GET;break}}setExtraData(extraData: Object) {this.options.extraData = extraData}setOptions(option: Object) {this.options = option}setList(list: number[], flag: number) {list = []for (let i = 0; i < flag; i++) {list[i] = i}return list}setParameter(keys: string[], values: string[]) {let result = {}for (let i = 0; i <= keys.length - 1; i++) {let key = keys[i]let value = values[i]result[key] = value}return result}async request() {let httpRequest = http.createHttp()httpRequest.on('dataReceive', function (data) {AppStorage.SetOrCreate('dataLength', data.byteLength);console.info('[ Demo dataReceive ]  ReceivedDataLength: ' + data.byteLength);});httpRequest.on('dataReceiveProgress', function (data) {AppStorage.SetOrCreate('receiveSize', data.receiveSize);AppStorage.SetOrCreate('totalSize', data.totalSize);console.info('[ Demo dataProgress ]  ReceivedSize: ' + data.receiveSize + ' TotalSize: ' + data.totalSize);});httpRequest.requestInStream(this.url, this.options);}}export default new Http()

发起请求:在[MainPage.ets]

/** Copyright (c) 2022-2023 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/import router from '@ohos.router'import Http from '../model/http'AppStorage.SetOrCreate('receiveSize', 0)AppStorage.SetOrCreate('totalSize', 0)AppStorage.SetOrCreate('dataLength', 0)@Entry@Componentexport struct setting {private getUri: string = ''private getOption?: object@State url: string = ''@State option?: object = undefined@State flag: number = 1@State keys: string[] = []@State list: number[] = [0]@State values: string[] = []@State result: string = ''@State method: string = 'GET'@State showPage: boolean = false@State resultInfo: string = ''@State methods: Array<string> = ['GET', 'HEAD', 'OPTIONS', 'TRACE', 'DELETE', 'POST', 'PUT', 'CONNECT']@Builder MenuBuilder() {Column() {ForEach(this.methods, (item: string) => {Text(item).margin(5).fontSize(16).textAlign(TextAlign.Center).onClick(() => {this.method = item})Divider().height(1)}, (item: string) => item.toString())}.width('180vp')}aboutToAppear() {this.url = this.getUrithis.option = this.getOptionHttp.setUrl(this.url)let context: Context = getContext(this)this.resultInfo = context.resourceManager.getStringSync($r('app.string.result').id)setInterval(() => {if (Http.url !== '') {this.result = "\r\nThe length of the data received by this callback: " +JSON.stringify(AppStorage.Get('dataLength') as number) +"\r\n" + "The length of the data received: " +JSON.stringify(AppStorage.Get('receiveSize') as number) + "\r\n" + "Total length of data: " +JSON.stringify(AppStorage.Get('totalSize') as number) + "\r\n" + "Percentage: " +JSON.stringify(Math.floor((AppStorage.Get('receiveSize') as number) /(AppStorage.Get('totalSize') as number) * 10000) / 100) + '%'} else {this.result = 'Failed'}}, 10)}build() {Scroll() {Column() {if (!this.showPage) {Text($r('app.string.configuration')).margin('2%').fontSize(28)Row() {Text(this.method).width('20%').fontSize(18).textAlign(TextAlign.Center).bindMenu(this.MenuBuilder).margin({ left: 2, right: 4 })TextInput({ placeholder: $r('app.string.web') }).width('75%').margin({ left: 4, right: 2 }).enableKeyboardOnFocus(false).onChange((value: string) => {this.url = value}).id('GET')}.width('95%').height('10%')ForEach(this.list, (item: number, index: number) => {Row() {Text('Key: ').width('20%').fontSize(18).margin({ left: 2, right: 4 }).textAlign(TextAlign.Center)TextInput({ placeholder: $r('app.string.key') }).width('76%').margin({ left: 4, right: 2 }).onChange((value: string) => {this.keys[this.flag - 1] = value}).id(`key${index + 1}`)}.width('95%').height('10%')Row() {Text('Value: ').width('20%').fontSize(18).margin({ left: 2, right: 4 }).textAlign(TextAlign.Center)TextInput({ placeholder: $r('app.string.value') }).width('75%').margin({ left: 4, right: 2 }).onChange((value: string) => {this.values[this.flag -1] = value}).id(`value${index + 1}`)}.width('95%').height('10%')}, (item: number) => item.toString())Column() {Button($r('app.string.add')).margin(10).fontSize(20).width('60%').onClick(() => {this.flag += 1this.list = Http.setList(this.list, this.flag)}).id('add')Button($r('app.string.reduce')).margin(10).fontSize(20).width('60%').onClick(() => {if (this.flag !== 1) {this.flag -= 1}this.list = Http.setList(this.list, this.flag)}).id('reduce')Button($r('app.string.reset')).id('reset').margin(10).fontSize(20).width('60%').onClick(() => {this.flag = 1this.list = [0]})Button($r('app.string.confirm')).margin(10).fontSize(20).width('60%').onClick(async () => {Http.setUrl(this.url)Http.setMethod(this.method)Http.setExtraData(Http.setParameter(this.keys, this.values))try {Http.request()} catch (err) {this.result = 'Failed'}this.showPage = !this.showPage}).id('submit')Button($r('app.string.back')).id('back').margin(10).fontSize(20).width('60%').onClick(() => {router.replace({url: 'pages/Index',params: {url: this.url === '' ? Http.url : this.url,option: Http.options}})})}.margin({ top: '2%', bottom: '2%' }).width('100%')} else {Text(`${this.resultInfo} ${this.result}`).id(`${this.result === '' || this.result === 'Failed' ? 'failed' : 'succeed'}`).fontSize(20).margin('5%')Button($r('app.string.back')).fontSize(25).onClick(() => {AppStorage.SetOrCreate('receiveData', 0)AppStorage.SetOrCreate('totalSize', 0)AppStorage.SetOrCreate('dataLength', 0)this.url = ''this.flag = 1this.keys = []this.list = [0]this.values = []this.result = ''this.method = 'GET'this.showPage = !this.showPage}).id('back')}}}.width('100%').height('100%')}}

通过TextInput组件获取参数,点击“确认”按钮后通过Http.request()方法调用http.createHttp().request()接口向指定的地址发送请求。
鸿蒙OpenHarmony知识已更新←点

765e5079845b5bb77f2aa30a2da70670.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/724157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重学SpringBoot3-yaml文件配置

重学SpringBoot3-yaml文件配置 引言YAML 基本语法YAML 数据类型YAML 对象YAML 数组复合结构标量引用 YAML 文件结构Spring Boot 中的 YAML 配置注意事项总结参考 引言 YAML&#xff08;YAML Ain’t Markup Language&#xff09;是一种常用于配置文件的数据序列化格式&#xff…

Docker 部署Harbor 443端口冲突

如果Harbor的443端口和主机服务器的443端口存在冲突,那么需要修改Harbor的443 修改docker-compose中443端口,那么需要docker-compose.yml和harbor.yml保持一致配置 当修改harbor.yml重启之后不生效的,则需要进入harbor安装路径 执行 ./install.sh 命令 harbor.yml docker-…

5G智能制造食品工厂数字孪生可视化平台,推进食品行业数字化转型

5G智能制造食品工厂数字孪生可视化平台&#xff0c;推进食品行业数字化转型。随着科技的飞速发展&#xff0c;食品工业正迎来一场前所未有的数字化转型。在这场转型中&#xff0c;5G智能制造工厂数字孪生可视化平台发挥着至关重要的作用。它不仅提高了生产效率&#xff0c;降低…

论文笔记:Compact Multi-Party Confidential Transactions

https://link.springer.com/chapter/10.1007/978-3-030-65411-5_21 A compact, private, Multi-Party Confidential Transactions (MCT) 紧凑型多方机密交易&#xff08;Compact MCT&#xff09;&#xff1a;MCT的长度与常规的单一所有者交易一样短&#xff1b;换句话说&…

前端面试知识点合集(持续性更新)

原型和原型链 任何函数都可以作为构造函数。当该函数通过 new 关键字调用的时候&#xff0c;就称之为构造函数。 var Parent function(){}//定义一个函数&#xff0c;那它只是一个普通的函数&#xff0c;不能称它为构造函数var instance new Parent(); //这时这个Parent就不…

使用vscode前面几行被定住

当我们使用 vscode 滚动代码文档的时候&#xff0c;发现前面几行被定住了&#xff0c;想 css 的 sticky 一样&#xff0c;可能是之前我们不小心点到了这里&#xff0c;取消就好了

SoundTouch对音频处理(Android)

SoundTouch对音频处理&#xff08;Android&#xff09; SoundTouch介绍 SoundTouch 是一个用于音频处理的开源库&#xff0c;主要用于改变音频的速度、音调和音量等特征。您可以在项目中使用 SoundTouch 库来实现音频处理的功能&#xff0c;比如变速播放、音高变化、混响效果…

2024年阿里云服务器配置选择指南_个人和企业如何选择ECS实例规格?

阿里云服务器配置怎么选择&#xff1f;CPU内存、公网带宽和系统盘怎么选择&#xff1f;个人开发者或中小企业选择轻量应用服务器、ECS经济型e实例&#xff0c;企业用户选择ECS通用算力型u1云服务器、ECS计算型c7、通用型g7云服务器&#xff0c;阿里云服务器网aliyunfuwuqi.com整…

亿发生产管控新篇章:mes系统专业推进,引领广州制造厂家数智转型

信息技术在企业发展中扮演着至关重要的角色。然而&#xff0c;随着生产组织方式向多品种、小批量转变&#xff0c;订单不断调整&#xff0c;制定计划需要根据市场和实际作业执行状态&#xff0c;不能仅仅依赖于物料和库存来控制生产。传统的生产现场管理已无法满足当今竞争激烈…

学习计算天数

学习计算天数 题目描述&#xff1a;解法思路&#xff1a;解法代码&#xff1a;运行结果&#xff1a; 题目描述&#xff1a; 输入y和m两个整数&#xff0c;y表示年份&#xff0c;m表示月份&#xff0c;计算y年m月有多少天&#xff0c;并输出天数。 测试1&#xff1a; 输⼊&…

MySQL基础-----SQL语句之DCL数据控制语句

目录 前言 一、管理用户 1.查询用户 2.创建用户 3.修改用户密码 4.删除用户 案例 二、权限控制 1.查询权限 2.授予权限 3.撤销权限 案例 前言 本期我们学习SQL语句的最后一部分内容&#xff0c;也就是数据控制语句DCL。DCL英文全称是Data Control Language(数据控制语…

HarmonyOS NEXT应用开发案例集

概述 随着应用代码的复杂度提升&#xff0c;为了使应用有更好的可维护性和可扩展性&#xff0c;良好的应用架构设计变得尤为重要。本篇文章将介绍一个应用通用架构的设计思路&#xff0c;以减少模块间的耦合、提升团队开发效率&#xff0c;为开发者呈现一个清晰且结构化的开发…

深度学习模型九大经典初始化方案

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 1. 正态分布初始化 正态分布初始化将权重初始化为来自正态&#xff08;或高斯&#xff09;分布的随机数。该分布通常以0为均值&#xff0c;其标…

HTTPS是什么,那些行业适合部署呢?

随着在线活动的增加&#xff0c;对您共享的关键数据的威胁已经产生了严重的后果&#xff0c;包括欺诈性金融交易、在线身份盗窃等。此外&#xff0c;随着技术使用的增加&#xff0c;网络攻击也变得更加复杂和具有挑战性。 毫无疑问&#xff0c;互联网用户的数据安全意识成倍增长…

友思特应用 | 轻装上阵:便携式光谱仪,助力食品安全的便捷保障

欢迎访问官网了解更多&#xff1a;智能化手持光谱仪 | Linksqaure光谱仪 | 近红外便携式光谱仪 | 价液体检测台 | 广州友思特科技有限公司 导读 食品安全是一个备受瞩目的话题。在消费电子和光子学的进步推动下&#xff0c;手持式光学仪器可用于食品安全以及质量的评估&#x…

PaddleOCR CPU 文本文字识别 docker部署

需求&#xff1a; 需要把所有滑块图片的数据文字提取出来 启动服务 mkdir paddle cd paddle docker run -itd --name ppocr -v $PWD:/paddle --networkhost -it registry.baidubce.com/paddlepaddle/paddle:2.1.3-gpu-cuda10.2-cudnn7 /bin/bash docker exec -it ppocr bash …

蓝牙网关在智慧医疗的应用

蓝牙网关在智慧医疗的应用已经逐渐得到广泛关注。作为一种无线通信技术&#xff0c;蓝牙网关能够将各种蓝牙设备连接起来&#xff0c;实现数据传输和信息共享。在智慧医疗领域&#xff0c;蓝牙网关的应用不仅可以提高医疗服务的效率和质量&#xff0c;还可以为患者带来更好的医…

2024年Android开发陷入饱和,,面试杀手锏

背景介绍 现在是一个信息大爆炸的时代&#xff0c;互联网世界中存在着无数的数据。信息就是这个时代最宝贵的资源&#xff0c;拥有了资源就相当于。互联网是块风水宝地&#xff0c;里面藏了无数的宝藏&#xff01;能不能挖到就看本事了。谁拥有了最全、最准确的信息&#xff0…

Jmeter 压测 —— 利用Docker分布式压测!

Jmeter分布式测试环境中有两个角色&#xff1a;Master 和 Slaves Master节点&#xff1a;向参与的Slaves节点发送测试脚本&#xff0c;并聚合Agent节点的执行结果。Slaves节点&#xff1a;接收并执行Master节点发送过来的测试脚本&#xff0c;并将执行结果返回给Master。 为什…

threejs展示glb模型

原模型为rvt模型 <template><div ref"threeJsContainer"class"three-js-container"></div> </template> <script> import { defineComponent } from "vue"; import * as THREE from "three"; import…