鸿蒙 ark ui 网络请求 我不允许你不会

前言:

最近有在学习这个鸿蒙的ark ui开发 因为鸿蒙不是发布了一个鸿蒙next的测试版本 明年会启动纯血鸿蒙应用 所以我就想提前给大家写一些博客文章

效果图

11-24 16:26:22.005 25156-25156/com.example.httpsrequest E A0ff00/HTTPS: 请求状态 --> 200, %{public}s
11-24 16:26:22.006 25156-25156/com.example.httpsrequest E A0ff00/HTTPS: 请求成功, %{public}s
11-24 16:26:22.006 25156-25156/com.example.httpsrequest E A0ff00/HTTPS: 请求返回数据, "{\"ret\":1,\"data\":[{\"id\":\"8289\",\"title\":\"\\u6cb9\\u7116\\u5927\\u867e\",\"pic\":\"http:\\/\\/www.qubaobei.com\\/ios\\/cf\\/uploadfile\\/132\\/9\\/8289.jpg\",\"collect_num\":\"1670\",\"food_str\":\"\\u5927\\u867e \\u8471 \\u751f\\u59dc \\u690d\\u7269\\u6cb9 \\u6599\\u9152\",\"num\":1670},{\"id\":\"2127\",\"title\":\"\\u56db\\u5ddd\\u56de\\u9505\\u8089\",\"pic\":\"http:\\/\\/www.qubaobei.com\\/ios\\/cf\\/uploadfile\\/132\\/3\\/2127.jpg\",\"collect_num\":\"1592\",\"food_str\":\"\\u732a\\u8089 \\u9752\\u849c \\u9752\\u6912 \\u7ea2\\u6912 \\u59dc\\u7247\",\"num\":1592},{\"id\":\"30630\",\"title\":\"\\u8d85\\u7b80\\u5355\\u8292\\u679c\\u5e03\\u4e01\",\"pic\":\"http:\\/\\/www.qubaobei.com\\/ios\\/cf\\/uploadfile\\/132\\/31\\/30630.jpg\",\"collect_num\":\"1552\",\"food_str\":\"QQ\\u7cd6 \\u725b\\u5976 \\u8292\\u679c\",\"num\":1552},{\"id\":\"9073\",\"title\":\"\\u5bb6\\u5e38\\u7ea2\\u70e7\\u9c7c\",\"pic\":\"http:\\/\\/www.qubaobei.com\\/ios\\/cf\\/uploadfile\\/132\\/10\\/9073.jpg\",\"co

具体实现:

添加网络访问权限 :

在module.json5 里面添加网络访问权限

"requestPermissions": [{"name": "ohos.permission.INTERNET"}
]

创建HTTPS请求

HTTPS协议是位于应用层的一种安全传输协议,与HTTP最大的区别是服务端与客户端之间进行数据传输都会经过TLS/SSL加密。该示例请求测试接口地址,并将请求得到的再日志里面打印出来。效果如图所示:

请求工具类

首先在OkHttpUtil.ets中调用createHttp方法创建一个请求任务,再通过request方法发起网络请求。该方法支持三个参数:url、options以及callback回调,其中options可以设置请求方法、请求头以及超时时间等。

import http from '@ohos.net.http';
import Constants, { ContentType } from '../constant/Constants';
import Logger from './Logger';
import { NewsData } from '../viewmodel/NewsData';export function httpRequestGet(url: string) {return httpRequest(url, http.RequestMethod.GET);
}export function httpRequestPost(url: string, params?: NewsData) {return httpRequest(url, http.RequestMethod.POST, params);
}function httpRequest(url: string, method: http.RequestMethod,params?: NewsData){let httpRequest = http.createHttp();let responseResult = httpRequest.request(url, {method: method,readTimeout: Constants.HTTP_READ_TIMEOUT,//读取超时时间 可选,默认为60000msheader: {'Content-Type': ContentType.JSON},connectTimeout: Constants.HTTP_READ_TIMEOUT,//连接超时时间  可选,默认为60000msextraData: params // 请求参数});return responseResult.then((value: http.HttpResponse)=>{Logger.error("请求状态 --> "+value.responseCode)if(value.responseCode===200){Logger.error("请求成功");let getresult = value.result;Logger.error('请求返回数据', JSON.stringify(getresult));return getresult;}}).catch((err)=>{return "";});
}

日志工具类

/** Copyright (c) 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 hilog from '@ohos.hilog';class Logger {private domain: number;private prefix: string;private format: string = '%{public}s, %{public}s';/*** constructor.** @param Prefix Identifies the log tag.* @param domain Domain Indicates the service domain, which is a hexadecimal integer ranging from 0x0 to 0xFFFFF.*/constructor(prefix: string = 'MyApp', domain: number = 0xFF00) {this.prefix = prefix;this.domain = domain;}debug(...args: string[]): void {hilog.debug(this.domain, this.prefix, this.format, args);}info(...args: string[]): void {hilog.info(this.domain, this.prefix, this.format, args);}warn(...args: string[]): void {hilog.warn(this.domain, this.prefix, this.format, args);}error(...args: string[]): void {hilog.error(this.domain, this.prefix, this.format, args);}
}export default new Logger('HTTPS', 0xFF00)

然后在view中展示去点击触发请求

import webView from '@ohos.web.webview';
import http from '@ohos.net.http';
import httpGet from '../common/utils/HttpUtil';
import StyleConstant from '../common/constant/StyleConstant';
import CommonConstant from '../common/constant/CommonConstants';
import { httpRequestGet }  from '../common/utils/OKhttpUtil';@Entry
@Component
struct WebPage {controller: webView.WebviewController = new webView.WebviewController();@State buttonName: Resource = $r('app.string.request_button_name');@State webVisibility: Visibility = Visibility.Hidden;@State webSrc: string = CommonConstant.DISH;build() {Column() {Row() {Image($r('app.media.ic_network_global')).height($r('app.float.image_height')).width($r('app.float.image_width'))TextInput({ placeholder: $r('app.string.input_address'), text: this.webSrc }).height($r('app.float.text_input_height')).layoutWeight(1).backgroundColor(Color.White).onChange((value: string) => {this.webSrc = value;})}.margin({top: $r('app.float.default_margin'),left: $r('app.float.default_margin'),right: $r('app.float.default_margin')}).height($r('app.float.default_row_height')).backgroundColor(Color.White).borderRadius($r('app.float.border_radius')).padding({left: $r('app.float.default_padding'),right: $r('app.float.default_padding')})Row() {Web({ src: this.webSrc, controller: this.controller }).zoomAccess(true).height(StyleConstant.FULL_HEIGHT).width(StyleConstant.FULL_WIDTH)}.visibility(this.webVisibility).height(StyleConstant.WEB_HEIGHT).width(StyleConstant.FULL_WIDTH).align(Alignment.Top)Row() {Button(this.buttonName).fontSize($r('app.float.button_font_size')).width(StyleConstant.BUTTON_WIDTH).height($r('app.float.button_height')).fontWeight(FontWeight.Bold).onClick(() => {this.onRequest();})}.height($r('app.float.default_row_height'))}.width(StyleConstant.FULL_WIDTH).height(StyleConstant.FULL_HEIGHT).backgroundImage($r('app.media.ic_background_image', ImageRepeat.NoRepeat)).backgroundImageSize(ImageSize.Cover)}async onRequest() {httpRequestGet(CommonConstant.DISH).then((data)=>{console.log("data --- > "+data);});}
}

分析 模块源码 可知,通过request方法建立请求后,模块底层首先会调用三方库 libcurl 中的curl_easy_init初始化一个简单会话。初始化完成后,接着调用curl_easy_setopt方法设置传输选项。其中CURLOPT_URL用于设置请求的URL地址,对应request中的url参数;CURLOPT_WRITEFUNCTION可以设置一个回调,保存接收的数据;CURLOPT_HEADERDATA支持设置回调,在回调中保存响应头数据。

传输选项设置成功后,调用curl_multi_perform执行传输请求,并通过curl_multi_info_read查询处理句柄是否有消息返回,最后进入HandleCurlData方法处理返回数据。

最后总结

ark ui里面网络请求也比较简单 基本用法我上面的代码有展示了写法基本和前端的js很像 有兴趣的有同学可以深入去研究官网里面提到TLS和SSL 握手过程 我这里就不展开分析了

为了能让大家更好的学习鸿蒙 (Harmony OS) 开发技术,这边特意整理了《鸿蒙 (Harmony OS)开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙 (Harmony OS)开发学习手册》

入门必看:https://qr21.cn/FV7h05

  1. 应用开发导读(ArkTS)
  2. 应用开发导读(Java)

HarmonyOS 概念:https://qr21.cn/FV7h05

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. 构建第一个JS应用
  4. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

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

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

相关文章

h5小游戏--2048

2048 经典2048小游戏,基于JS、Html5改写版 效果预览 点我下载源代码 下载代码解压后,双击index.html即可开始本游戏。 Game Rule 游戏规则 以下为游戏默认规则,若需要修改规则请修改代码。 移动箭头键来移动方块,当两个相同数…

终于来了,Runway gen2 制作AI视频的全功能超详细使用教程

最近有好几个学员私信我们,让我出一期Runway完整的使用教程,刚好11月Runway对外发布运动涂笔等新功能,那么今天就给大家安排一期全功能,超详细的从Gen1到Gen2的使用教程。 Runway 是国外一家在线视频剪辑制作网站,作为…

C/C++ 通过SQLiteSDK增删改查

SQLite,作为一款嵌入式关系型数据库管理系统,一直以其轻量级、零配置以及跨平台等特性而备受青睐。不同于传统的数据库系统,SQLite是一个库,直接与应用程序一同编译和链接,无需单独的数据库服务器进程,实现…

Anaconda安装与Python虚拟环境配置保姆级图文教程(附速查字典)

目录 1 混乱的Python库2 什么是Anaconda?3 Anaconda的安装3.1 Windows系统3.2 Linux系统3.3 测试 4 虚拟环境管理(速查字典) 1 混乱的Python库 你有没有遇到过这样的问题 在项目A中需要用到某个Python库PkgA,且项目A的其他库要求PkgA的版本必须为v3.0以…

如何给echarts的legend设置不同的样式和位置 legend分组显示

legend分组显示 给每一个图例设置不一样的位置和样式 样式如下 demo代码 option {title: {text: Stacked Line},tooltip: {trigger: axis},// legend写为数组可以给一些给某些组分配一些不一样的样式legend: [{data: [// 使用svg画任意的图形{name:Email,icon: path://"…

歌手荆涛演唱的《春节回家》,一种情感的表达和文化的传承

歌手荆涛演唱的《春节回家》,一种情感的表达和文化的传承 春节回家,是中国传统文化中最为重要的传统节日之一,也是亿万华夏儿女最为期待的日子。每当春节临近,无论身在何处,人们都会收拾行囊,踏上归途&…

我的第一个Arduino点灯程序

我简直难以相信,什么都不用配置,就这么几行代码,就可以blink了 void setup() {// Set up the built-in LED pin as an output:pinMode(PA1, OUTPUT); }void loop() {digitalWrite(PA1,!digitalRead(PA1));// Turn the LED from off to on, o…

float和double(浮点型数据)在内存中的储存方法

作者:元清加油 主页:主页 编译环境:visual studio 2022 (x86) 相信大家都知道数据在内存中是以二进制储存的 整数的储存方法是首位是符号位,后面便是数值位 那么浮点数在内存中是怎么储存的呢?我们先来看一个例子&am…

鸿蒙HarmonyOS 编辑器 下载 安装

好 各位 之前的文章 注册并实名认证华为开发者账号 我们基实名注册了华为的开发者账号 我们可以访问官网 https://developer.harmonyos.com/cn/develop/deveco-studio 在这里 直接就有我们编辑器的下载按钮 我们直接点击立即下载 这里 我们根据自己的系统选择要下载的系统 例…

Excel表中合并两个Sheet的方法?

按AltF11,调出Visual Basic 界面。 在左侧窗口中,右键选择“插入”—“模块”: 将如下代码粘贴进去,点击运行按钮,完成数据表合并。 Sub MergeAllSheetsInThisWorkbook() On Error Resume Next Application.ScreenU…

AR眼镜双目光波导/主板硬件方案

AR(增强现实)技术的发展离不开光学元件,而在其中,光波导和Micro OLED被视为AR眼镜光学方案的黄金搭档。光学元件在AR行业中扮演着核心角色,其成本高昂且直接影响用户体验的亮度、清晰度和大小等因素。AR眼镜的硬件成本中,光机部分…

抖音权重查询源码H5源码

源码下载:123网盘