【關(guān)鍵字】
HttpRequest、ArkTS、網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求、@ohos.net.http
【前言】
在使用ArkTS開(kāi)發(fā)HarmonyOS應(yīng)用時(shí),需要調(diào)用HTTP網(wǎng)絡(luò)請(qǐng)求?@ohos.net.http?動(dòng)態(tài)獲取數(shù)據(jù),進(jìn)行UI列表刷新,這想必是應(yīng)用開(kāi)發(fā)最常見(jiàn)的功能。但是根據(jù)官網(wǎng)網(wǎng)絡(luò)請(qǐng)求的示例代碼進(jìn)行功能開(kāi)發(fā)時(shí),封裝方法進(jìn)行HTTP請(qǐng)求后,返回獲取數(shù)據(jù)總是為空,無(wú)法返回調(diào)用接口獲取的結(jié)果,經(jīng)過(guò)一系列步驟檢查,終于獲取到數(shù)據(jù),在此附上我的開(kāi)發(fā)步驟、一些注意事項(xiàng)以及參考文檔。
【開(kāi)發(fā)步驟】
步驟1:根據(jù)官方文檔,HTTP網(wǎng)絡(luò)請(qǐng)求需要申請(qǐng)ohos.permission.INTERNET權(quán)限,需要在配置文件module.json5中添加權(quán)限,如下:
"requestPermissions": [
{
"name": "ohos.permission.INTERNET",
"usedScene": {
"when": "always"
}
}
]
步驟2:封裝HTTP請(qǐng)求方法,由于這里需要請(qǐng)求數(shù)據(jù)后返回,所以不能直接用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請(qǐng)求的URL地址,可以帶參數(shù)也可以不帶參數(shù)。URL地址需要開(kāi)發(fā)者自定義。請(qǐng)求的參數(shù)可以在extraData中指定
"http://xxxxx",
{
method: http.RequestMethod.GET, // 可選,默認(rèn)為http.RequestMethod.GET
// 開(kāi)發(fā)者根據(jù)自身業(yè)務(wù)需要添加header字段
header: {
'Content-Type': 'application/json'
},
expectDataType: http.HttpDataType.STRING, // 可選,指定返回?cái)?shù)據(jù)的類型
}
);
// 使用await和async,等待請(qǐng)求完成處理數(shù)據(jù)后返回
await response.then((data) => {
if (data.responseCode == 200) {
// 處理返回結(jié)果
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 請(qǐng)求失敗,進(jìn)行失敗邏輯處理
}
}).catch((err) => {
// todo 請(qǐng)求失敗,進(jìn)行失敗邏輯處理
console.info('error:' + JSON.stringify(err));
})
return dataList;
}
步驟3:在ets文件中調(diào)用方法獲取數(shù)據(jù),注意由于封裝getHttpData時(shí)為async方法,所以調(diào)用同樣需要使用async方式調(diào)用,代碼如下所示:
@State dataList: Array<MyData> = [{ id: "1", content: "content", createTime: "" }]
async aboutToAppear() {
this.dataList = await getHttpData()
}
步驟4:獲取到dataList數(shù)組后,就可以通過(guò)ForEach循環(huán)顯示組件和數(shù)據(jù)啦,到此就完成HTTP網(wǎng)絡(luò)請(qǐng)求動(dòng)態(tài)數(shù)據(jù)獲取刷新UI界面啦。
【注意事項(xiàng)】
1、使用ArkTS中網(wǎng)絡(luò)請(qǐng)求接口時(shí),一定要申請(qǐng)ohos.permission.INTERNET權(quán)限;
2、封裝方法進(jìn)行HTTP請(qǐng)求時(shí),注意需要使用Promise方式配合await和async使用,await添加到獲取數(shù)據(jù)處理數(shù)據(jù)那一步,才能同步返回獲取后數(shù)據(jù)結(jié)果;
3、調(diào)用HTTP請(qǐng)求方法時(shí),同樣需要使用async。
4、我提供的示例中未使用extraData,若需要進(jìn)行參數(shù)請(qǐng)求時(shí),注意不能對(duì)extraData整個(gè)參數(shù)進(jìn)行加密處理,因?yàn)閑xtraData通過(guò)string方式傳遞時(shí),是使用key1=value1&key2=value2方式連接,其中“=”和“&”不能進(jìn)行加密處理,只能加密處理其中的key或者value值。
【參考文檔】
文檔中心:HTTP數(shù)據(jù)請(qǐng)求文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-717636.html
文檔中心: @ohos.net.http (數(shù)據(jù)請(qǐng)求)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-717636.html
到了這里,關(guān)于【HarmonyOS】【ArkTS】如何使用HTTP網(wǎng)絡(luò)請(qǐng)求獲取動(dòng)態(tài)數(shù)據(jù)刷新UI界面的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!