鸿蒙ArkTS中的获取网络数据

news/2024/11/8 10:07:34/

  一、通过web组件加载网页

  在C/S应用程序中,都有网络组件用于加载网页,鸿蒙ArkTS中也有类似的组件。
  web组件,用于加载指定的网页,里面有很多的方法可以调用,虽然现在用得比较少,了解还是必须的。
  演示代码:

import webview from '@ohos.web.webview';@Entry
@Component
struct Index {myController:webview.WebviewController=new  webview.WebviewController() //控制器@State strWebURL:string=''  //网络地址@State strWebResult:string='' //返回的结果build() {Column({space:10}) {Row(){Column(){Row(){TextInput({placeholder:'请输入网址'}).layoutWeight(1).onChange((value:string)=>{this.strWebURL=value})Button('加载').onClick(()=>{// this.strWebURL = 'https://www.baidu.com';this.myController.loadUrl(this.strWebURL);})Button('刷新').onClick(()=>{this.myController.refresh();})Button('停止').onClick(()=>{this.myController.stop();})}Web({src:this.strWebURL,controller:this.myController}).height('100%').width('100%').zoomAccess(true).textZoomRatio(2)}}}.height('100%').width('100%')}
}

  我的计算机很卡顿,一直没有重装系统,可以运行出效果,安装了Huawei Mate10的真机模拟器。
  1、使用系统自带的模拟器Previewer预览时系统会提示:Property 'relativeOffset' does not exist on type 'TextAttribute'. <ArkTSCheck>,连上华为Mate10,下载安装文件后,模拟效果就出来了。
  2、需要开通网络访问权限。在module.json5中配置网络访问权限:

  3、注意函数名的大小写,我因为这个问题折腾了2个多小时,犯了很低级的错误。

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

  二、加载本地的网页并执行网页中的函数并得到返回数据

  与上面的类似,只是文件存放到resource\rawfile目录下。可以执行网页的程序并得到返回值。

import webview from '@ohos.web.webview';@Entry
@Component
struct Index {myController:webview.WebviewController=new  webview.WebviewController() //控制器@State strResult:string=''build() {Column({space:10}) {Row(){Web({src:$rawfile('test.html'),controller:this.myController}).height(300).width('100%').javaScriptAccess(true)}.height(300).width('100%').backgroundColor(Color.Pink)Row({space:6}){Button('加载本地网页').onClick(()=>{console.log('123')this.myController.runJavaScript('Test()').then(result =>{console.log(result)this.strResult=result})console.log(this.strResult)})Text('返回数据:')Text(this.strResult)}.height(200).width('100%').backgroundColor(Color.Orange)}.height('100%').width('100%')}
}

  效果图:

  网页test.html内容:

<!DOCTYPE html>
<html>
<head><title>JavaScript->函数</title>
</head>
<body><div id="demo"><font size=32>JavaScript->函数</font></div><input type="button" value="点击" onclick="Test123()" id="DD3"/><input type="button" value="点击" onclick="Test()" id="DD3"/>
<script>function Test(){document.getElementById("demo").style.color="#d70008"return 'test.html返回的数据'}function Test123(){return '点击按钮l返回的数据'}
</script>
</body>
</html>

  三、通过get和post获取网络数据

  使用http不可视组件可以通过get和post方法来获取网络数据,格式比较固定,实际使用时可以根据情况再封装一下,就是加上async和await。

  代码:

import http from '@ohos.net.http';
import { JSON } from '@kit.ArkTS';@Entry
@Component
struct MyComponent {@State StrReturnData_Get:string=''@State StrReturnData_Post:string=''@State strUrl_Get:string=''@State strUrl_Post:string=''objectToStringEncoding(obj:Record<string,string>) {let encodedStr = '';for (let key of Object.entries(obj)) {encodedStr += `${key[0]}=${encodeURIComponent(key[1])}&`;}return encodedStr.slice(0, -1); // 去除最后多余的 '&'
}build() {Column({space:10}) {Row(){Button('获取Get数据').fontSize(12).onClick(() => this.getWeatherData());TextInput({placeholder:'请输入网址'}).onChange((value:string)=>{this.strUrl_Get=value})}.width('100%').height(32)Row(){Text(this.StrReturnData_Get)}.layoutWeight(1)Row(){Button('获取Post数据').fontSize(12).onClick(() => this.getPostData())TextInput({placeholder:'请输入网址'}).onChange((value:string)=>{this.strUrl_Post=value})}.width('100%').height(32)Row(){Text(this.StrReturnData_Post)}.layoutWeight(1)}}getWeatherData() {let httpRequest =http.createHttp()httpRequest.request(this.strUrl_Get,{method:http.RequestMethod.GET,header:{'Content-Type':'application/json'},},(error,data)=>{if(!error){this.StrReturnData_Get=data.result.toString()console.log(this.StrReturnData_Get)}else {console.log(data.responseCode.toString())console.log(JSON.stringify(error))}})}getPostData() {let httpRequest =http.createHttp()httpRequest.request(this.strUrl_Post,{method:http.RequestMethod.POST,header:{'Content-Type':'application/x-www-form-urlencoded'},extraData:this.objectToStringEncoding({"name":"张三"})//   readTimeout:3000,// connectTimeout:3000},(error,data)=>{if(!error){this.StrReturnData_Post=data.result.toString()console.log(this.StrReturnData_Post)}else {console.log(data.responseCode.toString())console.log(JSON.stringify(error))}})}
}

  效果:

  实际上,ArkTS中封装了很多获取网络数据的组件,后面再一一学习。


http://www.ppmy.cn/news/1545328.html

相关文章

STM32 BootLoader 刷新项目 (八) 读取Flash保护ROP-0x54

STM32 BootLoader 刷新项目 (八) 读取Flash保护ROP-0x54 下面我们来介绍一下BootLoader一上电对芯片Option Byte操作的过程&#xff0c;Option Byte可以配置的功能包括**Read protection (RDP) **读出保护级别&#xff0c;**BOR级别&#xff08;Brown-out Reset&#xff09;**…

# SpringMVC学习

SpringMVC 1、SpringMVC是什么&#xff1f; SpringMVC 是 Spring 框架的一个模块&#xff0c;专门用于构建 Web 应用程序。它基于 Model-View-Controller (MVC) 设计模式&#xff0c;帮助开发者将应用程序的不同部分&#xff08;模型、视图和控制器&#xff09;分离&#xff…

人工智能:重塑生活与工作的神奇力量

人工智能&#xff0c;宛如一颗璀璨的科技之星&#xff0c;正以燎原之势改变着世界。从医疗到企业&#xff0c;从生活点滴到出行方式&#xff0c;它无处不在。 在医疗领域&#xff0c;诊断疾病不再仅仅依靠医生的经验。AI 系统能够快速分析大量的病例数据&#xff0c;识别出细微…

“农田奇迹:如何用遥感技术实现作物分类与产量精准估算“

在科技飞速发展的时代&#xff0c;遥感数据的精准分析已经成为推动各行业智能决策的关键工具。从无人机监测农田到卫星数据支持气候研究&#xff0c;空天地遥感数据正以前所未有的方式为科研和商业带来深刻变革。然而&#xff0c;对于许多专业人士而言&#xff0c;如何高效地处…

Python配合Flask搭建简单的个人博客案例demo

开发一个简单的博客网站使用 Python&#xff0c;通常可以选择一些流行的 web 框架&#xff0c;如 Flask 或 Django。下面我将以 Flask 为例&#xff0c;带你开发一个简单的博客网站。 环境准备&#xff1a; Flask 非常适合构建轻量级的博客网站&#xff0c;如果想要更多功能&am…

「C/C++」C/C++ 之 变量作用域详解

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

Transformer和BERT的区别

Transformer和BERT的区别比较表&#xff1a; 两者的位置编码&#xff1a; 为什么要对位置进行编码&#xff1f; Attention提取特征的时候&#xff0c;可以获取全局每个词对之间的关系&#xff0c;但是并没有显式保留时序信息&#xff0c;或者说位置信息。就算打乱序列中token…

Fork突然报错

现象&#xff1a; Could not resolve hostname github.com: No address associated with hostname fatal: Could not read from remote repository. 原因&#xff1a;需要为fork设置代理 步骤&#xff1a; 1.通过winR输入%localappdata%\fork\gitInstance打开文件夹 2.找到…