【HarmonyOS】【ArkTS】如何使用HTTP网络请求获取动态数据刷新UI界面
【关键字】
HttpRequest、ArkTS、网络数据请求、@ohos.net.http
【前言】
在使用ArkTS开发HarmonyOS应用时,需要调用HTTP网络请求 @ohos.net.http 动态获取数据,进行UI列表刷新,这想必是应用开发最常见的功能。但是根据官网网络请求的示例代码进行功能开发时,封装方法进行HTTP请求后,返回获取数据总是为空,无法返回调用接口获取的结果,经过一系列步骤检查,终于获取到数据,在此附上我的开发步骤、一些注意事项以及参考文档。
【开发步骤】
步骤1:根据官方文档,HTTP网络请求需要申请ohos.permission.INTERNET权限,需要在配置文件module.json5中添加权限,如下:
"requestPermissions": [
{
"name": "ohos.permission.INTERNET",
"usedScene": {
"when": "always"
}
}
]
步骤2:封装HTTP请求方法,由于这里需要请求数据后返回,所以不能直接用callback方式作为异步方法,需要使用Promise方式作为异步方法,配合await和async使用,代码参考如下(其中MyData为自定义类,可忽略):
import http from '@ohos.net.http';
import MyData from '../MyData' export default async function getHttpData(): Promise<MyData[]> {
let dataList: MyData[] = [] let httpRequest = http.createHttp();
let response = httpRequest.request(
// 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定
"http://xxxxx",
{
method: http.RequestMethod.GET, // 可选,默认为http.RequestMethod.GET
// 开发者根据自身业务需要添加header字段
header: {
'Content-Type': 'application/json'
},
expectDataType: http.HttpDataType.STRING, // 可选,指定返回数据的类型
}
);
// 使用await和async,等待请求完成处理数据后返回
await response.then((data) => {
if (data.responseCode == 200) {
// 处理返回结果
const response = data.result + "";
const res = JSON.parse(response).data
for (let i = 0; i < res.length; i++) {
let item = res[i];
dataList.push({
id: item.id, content: item.content, createTime: item.createTime
});
}
} else {
// todo 请求失败,进行失败逻辑处理
}
}).catch((err) => {
// todo 请求失败,进行失败逻辑处理
console.info('error:' + JSON.stringify(err));
})
return dataList;
}
步骤3:在ets文件中调用方法获取数据,注意由于封装getHttpData时为async方法,所以调用同样需要使用async方式调用,代码如下所示:
@State dataList: Array<MyData> = [{ id: "1", content: "content", createTime: "" }] async aboutToAppear() {
this.dataList = await getHttpData()
}
步骤4:获取到dataList数组后,就可以通过ForEach循环显示组件和数据啦,到此就完成HTTP网络请求动态数据获取刷新UI界面啦。
【注意事项】
1、使用ArkTS中网络请求接口时,一定要申请ohos.permission.INTERNET权限;
2、封装方法进行HTTP请求时,注意需要使用Promise方式配合await和async使用,await添加到获取数据处理数据那一步,才能同步返回获取后数据结果;
3、调用HTTP请求方法时,同样需要使用async。
4、我提供的示例中未使用extraData,若需要进行参数请求时,注意不能对extraData整个参数进行加密处理,因为extraData通过string方式传递时,是使用key1=value1&key2=value2方式连接,其中“=”和“&”不能进行加密处理,只能加密处理其中的key或者value值。
【参考文档】
【HarmonyOS】【ArkTS】如何使用HTTP网络请求获取动态数据刷新UI界面的更多相关文章
- Flutter获取远程数据 刷新UI界面
import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; void main() => r ...
- ajax请求获取的数据无法赋值给全局变量问题总结
一.总结: 1.问题描述: 今天做项目遇到在用表单显示详细信息的过程中ajax请求获取的数据无法赋值给全局变量的情况,从列表页面进入详情页,在详情页面被渲染了之后就会调用js文件里的接口向服务器请求数 ...
- 微信小程序教学第二章(含视频):小程序中级实战教程之预备篇 - 封装网络请求及 mock 数据
§ 封装网络请求及 mock 数据 本文配套视频地址: https://v.qq.com/x/page/i05544fogcm.html 开始前请把 ch2-3 分支中的 code/ 目录导入微信开发 ...
- Golang 网络爬虫框架gocolly/colly 五 获取动态数据
Golang 网络爬虫框架gocolly/colly 五 获取动态数据 gcocolly+goquery可以非常好地抓取HTML页面中的数据,但碰到页面是由Javascript动态生成时,用goque ...
- PHP/Post 提交请求获取json数据,并转化为所需要的数组
/** * Post 提交请求获取json数据,并转化为所需要的数组 */ function request_post($url = '', $param = '') { if (empty($url ...
- iOS 通过网络请求获取图片的下载歌曲
1.导入代理<NSURLConnectionDataDelegate> @interface ViewController ()<NSURLConnectionDataDelegat ...
- ios MVVM实践 刷新网络请求+tableView展示数据
[实现效果] [目录结构相关] 此示例展示用的是MVVM结构形式,表述如下 M:数据Model的存储,可以用来对属性进行处理.(即胖model概念,上图中xx万人订阅这个处理方法写在Model内) V ...
- 网络请求Adapter添加数据
一般在开发中我们都需要在listview中添加数据显示在界面上 1.首先我们会在布局中写一个listview <FrameLayout xmlns:android="http://sc ...
- iOS项目中的网络请求和上下拉刷新封装
代码地址如下:http://www.demodashi.com/demo/11621.html 一.运行效果图 现在的项目中不可避免的要使用到网络请求,而且几乎所有软件都有上下拉刷新功能,所以我在此对 ...
- JSONP 跨域请求 - 获取JSON数据
如何用原生方式使用JSONP? 下边这一DEMO实际上是JSONP的简单表现形式,在客户端声明回调函数之后,客户端通过script标签向服务器跨域请求数据,然后服务端返回相应的数据并动态执行回调函数. ...
随机推荐
- ACM-NEFU15届校赛-大一组
A. 三角形面积 #include <bits/stdc++.h> using namespace std; int main() { double a,b,c; double ans,p ...
- Django笔记十八之save函数的继承操作和指定字段更新等实例方法
本文首发于微信公众号:Hunter后端 原文链接:Django笔记十八之save函数的继承操作和指定字段更新等实例方法 这篇笔记主要介绍 Django 一些实例方法. 什么是 实例,我们知道通过fil ...
- Java 8新特性之 Optional 类
前言 java.util.Optional 是java8中引进的一个新的类,我们通过Optional类的源码可以看到,该方法的作用可以对可能缺失的值进行建模,而不是直接将null赋值给变量. Opti ...
- 粘包,自定义协议,struct模块,粘包解决终极大招
粘包: 1.粘包问题出现的原因: (udp不会出现粘包问题) 1.1.tcp是流式协议,数据像水流一样黏在一起,没有任何边界区分 1.2.收数据没收干净,有残留,就会下一次结果混淆在一起去(客户端接受 ...
- RDIFramework.NET开发框架在线表单设计整合工作流程的使用
1.概述 在RDIFramework.NET开发框架在线表单设计助力可视化快速开发文章中,我们介绍了不使用编码的方式进行表单的在线设计并挂接在对应的模块下,加速应用的落地与实现.同样,通过在线设计的表 ...
- 如何在 vue3 中使用 jsx/tsx?
我们都知道,通常情况下我们使用 vue 大多都是用的 SFC(Signle File Component)单文件组件模式,即一个组件就是一个文件,但其实 Vue 也是支持使用 JSX 来编写组件的.这 ...
- DeFi4-稳定币
稳定币--稳定 是一个相对的度量指标 波动性,收益率标准差 在一个时间段内最大跌幅 Fiat,例如: 欧元.英镑的波动率为6-12% (波动本身并不能反映价格的范围 稳定币 vs 锚定币 稳定币类型 ...
- 关于Java中值传递和址传递
参数传递在Java中有两种类型 值和址 其实本质都是一份拷贝 在调用函数的时候 进行压栈 传进来的参数会被开辟一份新的空间 传基本类型是把值传过去 传引用数据类型是实例指向实参 void m(int ...
- P2482 [SDOI2010] 猪国杀
方法论 这是一道复杂的模拟题.由于游戏规则的条目很多,我们需要仔细考虑程序的组织.否则,在编写程序的过程中极容易陷入停滞的状态(不知道下一步应该怎么做),或在发现程序出问题时,难以快速定位到错误点,对 ...
- Maven工程开发
Maven工程开发 编写pom.xml配置文件 <properties></properties>定义项目的基本信息 groupId 反向域名,定义项目组名 artifactI ...