開源 Arkts 鴻蒙應用 開發(十)通訊--Http數據傳輸

?文章的目的為了記錄使用Arkts?進行Harmony?app?開發學習的經歷。本職為嵌入式軟件開發,公司安排開發app,臨時學習,完成app的開發。開發流程和要點有些記憶模糊,趕緊記錄,防止忘記。

?相關鏈接:

開源 Arkts 鴻蒙應用 開發(一)工程文件分析-CSDN博客

開源 Arkts 鴻蒙應用 開發(二)封裝庫.har制作和應用-CSDN博客

開源 Arkts 鴻蒙應用 開發(三)Arkts的介紹-CSDN博客

開源 Arkts 鴻蒙應用 開發(四)布局和常用控件-CSDN博客

開源 Arkts 鴻蒙應用 開發(五)控件組成和復雜控件-CSDN博客

開源 Arkts 鴻蒙應用 開發(六)數據持久--文件和首選項存儲-CSDN博客

開源 Arkts 鴻蒙應用 開發(七)數據持久--sqlite關系數據庫-CSDN博客

開源 Arkts 鴻蒙應用 開發(八)多媒體--相冊和相機-CSDN博客

開源 Arkts 鴻蒙應用 開發(九)通訊--tcp客戶端-CSDN博客

開源 Arkts 鴻蒙應用 開發(十)通訊--Http-CSDN博客

?推薦鏈接:

開源 java android app 開發(一)開發環境的搭建-CSDN博客

開源 java android app 開發(二)工程文件結構-CSDN博客

開源 java android app 開發(三)GUI界面布局和常用組件-CSDN博客

開源 java android app 開發(四)GUI界面重要組件-CSDN博客

開源 java android app 開發(五)文件和數據庫存儲-CSDN博客

開源 java android app 開發(六)多媒體使用-CSDN博客

開源 java android app 開發(七)通訊之Tcp和Http-CSDN博客

開源 java android app 開發(八)通訊之Mqtt和Ble-CSDN博客

開源 java android app 開發(九)后臺之線程和服務-CSDN博客

開源 java android app 開發(十)廣播機制-CSDN博客

開源 java android app 開發(十一)調試、發布-CSDN博客

開源 java android app 開發(十二)封庫.aar-CSDN博客

推薦鏈接:

開源C# .net mvc 開發(一)WEB搭建_c#部署web程序-CSDN博客

開源 C# .net mvc 開發(二)網站快速搭建_c#網站開發-CSDN博客

開源 C# .net mvc 開發(三)WEB內外網訪問(VS發布、IIS配置網站、花生殼外網穿刺訪問)_c# mvc 域名下不可訪問內網,內網下可以訪問域名-CSDN博客

開源 C# .net mvc 開發(四)工程結構、頁面提交以及顯示_c#工程結構-CSDN博客

https://blog.csdn.net/ajassi2000/article/details/149584283?spm=1011.2124.3001.6209開源 C# .net mvc 開發(五)常用代碼快速開發_c# mvc開發-CSDN博客

本章內容主要是通過Http訪問web網站,獲得天氣的Json數據,進行解析的功能。將訪問的頁面地址進行修改,添加id和key則可以訪問網站的Api,實現高級功能。

一、添加權限,與上個章節相同,在module.json5的最后添加上以下代碼

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

二、Index.ets代碼分析

2.1? 界面代碼

2個Text,1個顯示Http的返回,1個顯示json數據

以下為代碼

 build() {Column() {// 顯示獲取到的網頁內容Scroll() {Column() {Text(this.responseData).fontSize(16).width('100%').textAlign(TextAlign.Start).padding(10)// 添加天氣信息顯示區域if (this.weatherInfo) {Divider().margin(10)Text('解析后的天氣數據:').fontSize(18).fontWeight(FontWeight.Bold).margin({ bottom: 10 })Text(`城市: ${this.weatherInfo.city}`).fontSize(16).margin({ bottom: 5 })Text(`溫度: ${this.weatherInfo.temp}°C`).fontSize(16).margin({ bottom: 5 })Text(`風向: ${this.weatherInfo.WD}`).fontSize(16).margin({ bottom: 5 })Text(`風力: ${this.weatherInfo.WS}`).fontSize(16).margin({ bottom: 5 })Text(`濕度: ${this.weatherInfo.SD}`).fontSize(16).margin({ bottom: 5 })Text(`氣壓: ${this.weatherInfo.qy} hPa`).fontSize(16).margin({ bottom: 5 })Text(`更新時間: ${this.weatherInfo.time}`).fontSize(16).margin({ bottom: 5 })}}.width('100%')}.height('80%').width('100%')// 請求按鈕Button('獲取天氣數據').width('80%').height(50).margin(20).onClick(() => {this.fetchWeatherData();})}.width('100%').height('100%')

2.2? Json數據結構

天氣數據

以下為代碼

// 定義天氣信息的接口類型
interface WeatherInfo {city: string;cityid: string;temp: string;WD: string;WS: string;SD: string;WSE: string;time: string;isRadar: string;Radar: string;njd: string;qy: string;rain: string;
}interface WeatherResponse {weatherinfo: WeatherInfo;
}

2.3??fetchWeatherData()方法:
創建HTTP請求,http.createHttp()
發送GET請求到天氣API,httpRequest.request()
成功時解析JSON并更新UI

以下為代碼

 // 發起HTTP請求private fetchWeatherData() {let httpRequest = http.createHttp();this.responseData = '正在請求數據...';this.weatherInfo = null;httpRequest.request('https://www.weather.com.cn/data/sk/101010100.html',{method: http.RequestMethod.GET,header: {'Content-Type': 'application/json'}},(err, data) => {if (err) {this.responseData = `請求失敗: ${JSON.stringify(err)}`;promptAction.showToast({ message: '請求失敗', duration: 2000 });return;}if (data.responseCode === 200) {try {const result: WeatherResponse = JSON.parse(data.result.toString());//this.responseData = `HTTP狀態碼: ${data.responseCode}\n\n原始JSON數據:\n${JSON.stringify(result, null, 2)}`;this.responseData = data.result.toString();if (result.weatherinfo) {this.weatherInfo = result.weatherinfo;}promptAction.showToast({ message: '獲取并解析成功', duration: 2000 });} catch (e) {this.responseData = `JSON解析失敗: ${e.message}\n\n原始數據:\n${data.result}`;promptAction.showToast({ message: 'JSON解析失敗', duration: 2000 });}} else {this.responseData = `請求異常: HTTP狀態碼 ${data.responseCode}`;promptAction.showToast({ message: '請求異常', duration: 2000 });}});}

2.4? 網絡API的使用

網上有各種網絡API,通常的方式是訪問地址和id以及key,通過注冊可以獲得id和key,訪問網址就可以獲得輸入,比如https://xxx/now?&id=CN101010100&key=xxxxx

關鍵流程:創建HTTP實例,?發起GET請求,處理響應(HTTP狀態碼非200為出錯需要處理)

https://www.weather.com.cn/data/sk/101010100.html地址頁面圖片

下面為代碼

import http from '@ohos.net.http';
import promptAction from '@ohos.promptAction';
import webview from '@ohos.web.webview';// 定義天氣信息的接口類型
interface WeatherInfo {city: string;cityid: string;temp: string;WD: string;WS: string;SD: string;WSE: string;time: string;isRadar: string;Radar: string;njd: string;qy: string;rain: string;
}interface WeatherResponse {weatherinfo: WeatherInfo;
}@Entry
@Component
struct HttpExample {@State responseData: string = '等待獲取數據...';@State webController: webview.WebviewController = new webview.WebviewController();@State weatherInfo: WeatherInfo | null = null;build() {Column() {// 顯示獲取到的網頁內容Scroll() {Column() {Text(this.responseData).fontSize(16).width('100%').textAlign(TextAlign.Start).padding(10)// 添加天氣信息顯示區域if (this.weatherInfo) {Divider().margin(10)Text('解析后的天氣數據:').fontSize(18).fontWeight(FontWeight.Bold).margin({ bottom: 10 })Text(`城市: ${this.weatherInfo.city}`).fontSize(16).margin({ bottom: 5 })Text(`溫度: ${this.weatherInfo.temp}°C`).fontSize(16).margin({ bottom: 5 })Text(`風向: ${this.weatherInfo.WD}`).fontSize(16).margin({ bottom: 5 })Text(`風力: ${this.weatherInfo.WS}`).fontSize(16).margin({ bottom: 5 })Text(`濕度: ${this.weatherInfo.SD}`).fontSize(16).margin({ bottom: 5 })Text(`氣壓: ${this.weatherInfo.qy} hPa`).fontSize(16).margin({ bottom: 5 })Text(`更新時間: ${this.weatherInfo.time}`).fontSize(16).margin({ bottom: 5 })}}.width('100%')}.height('80%').width('100%')// 請求按鈕Button('獲取天氣數據').width('80%').height(50).margin(20).onClick(() => {this.fetchWeatherData();})}.width('100%').height('100%')}// 發起HTTP請求private fetchWeatherData() {let httpRequest = http.createHttp();this.responseData = '正在請求數據...';this.weatherInfo = null;httpRequest.request('https://www.weather.com.cn/data/sk/101010100.html',{method: http.RequestMethod.GET,header: {'Content-Type': 'application/json'}},(err, data) => {if (err) {this.responseData = `請求失敗: ${JSON.stringify(err)}`;promptAction.showToast({ message: '請求失敗', duration: 2000 });return;}if (data.responseCode === 200) {try {const result: WeatherResponse = JSON.parse(data.result.toString());//this.responseData = `HTTP狀態碼: ${data.responseCode}\n\n原始JSON數據:\n${JSON.stringify(result, null, 2)}`;this.responseData = data.result.toString();if (result.weatherinfo) {this.weatherInfo = result.weatherinfo;}promptAction.showToast({ message: '獲取并解析成功', duration: 2000 });} catch (e) {this.responseData = `JSON解析失敗: ${e.message}\n\n原始數據:\n${data.result}`;promptAction.showToast({ message: 'JSON解析失敗', duration: 2000 });}} else {this.responseData = `請求異常: HTTP狀態碼 ${data.responseCode}`;promptAction.showToast({ message: '請求異常', duration: 2000 });}});}
}

三、最終效果

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93184.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93184.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93184.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

net8.0一鍵創建支持(RabbitMQ)

Necore項目生成器 - 在線創建Necore模板項目 | 一鍵下載 RabbitMQController.cs using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using RabbitMQ.Client; using RabbitMQ.Client.Events; using System.Text; using System.Threading.Tasks; using UnT.Tem…

Rust 泛型與特性

Rust 泛型與特性 引言 Rust 語言以其安全性和高效性在編程語言中獨樹一幟。Rust 的泛型和特性是其核心特性之一,它們使得開發者能夠編寫更加通用、靈活且安全的代碼。本文將深入探討 Rust 中的泛型和特性,包括其概念、用法以及在實際開發中的應用。 泛型簡介 概念 泛型是…

LangChain學習——結構化輸出和數據解析

LangChain 本指南全面介紹LangChain中結構化輸出生成和數據解析的核心功能,包括Pydantic BaseModel構造、各種輸出解析器的使用,以及高級錯誤處理機制。 詳細測試樣例和代碼可參考如下兩個鏈接: test_output_parserstest_pydantic_base_mo…

基于華為ENSP的BGP的狀態機深入淺出

本篇技術博文摘要 🌟 本文章主要探討BGP狀態機如何控制BGP連接的建立與維護,以及BGP協議在運行過程中如何交換路由信息并確保網絡的穩定性 引言 📘 在這個快速發展的技術時代,與時俱進是每個IT人的必修課。我是腎透側視攻城獅&…

Android 15中的16KB大頁有何優勢?

deepseek回答: Android 15引入的16KB大內存頁是系統性能優化的關鍵變革,其核心優勢體現在以下方面: ? 一、性能全面提升 系統整體加速 配置16KB頁面的設備整體性能提升5%-10%,通過減少內存管理開銷釋放更多資源用于應用運行。…

Gis數據的A*算法規劃航線

1.1 用到的技術棧geotools JTSJgrapht1.2 實現思路// 定義柵格網格參數private static final double CELL_SIZE_DEGREES 0.005;private static int gridWidth 0;//格子高度 index 1private static int gridHeight 0;//格子寬度// 1. 讀取GeoJSON文件File geoJsonFile new …

Spring Boot 默認使用 CGLIB,但CGLIB 無法代理 final 類或 final 方法

那么當這兩件事沖突時,Spring Boot 是怎么“解決”的呢?答案是:它不解決,也無法解決。當這種情況發生時,你的應用程序會直接啟動失敗。這不是 Spring Boot 的疏忽,而是由 CGLIB 的底層原理和 Java 語言的規…

cuda編程筆記(10)--memory access 優化

全局內存訪問優化(Coalesced Access) 什么是 Coalesced Access? 定義:一個 warp(32 個線程)在同一指令中訪問全局內存時,如果這些訪問請求可以合并成盡可能少的內存事務(通常是 32…

閑庭信步使用圖像驗證平臺加速FPGA的開發:第三十一課——車牌識別的FPGA實現(3)車牌字符分割預處理

(本系列只需要modelsim即可完成數字圖像的處理,每個工程都搭建了全自動化的仿真環境,只需要雙擊top_tb.bat文件就可以完成整個的仿真,大大降低了初學者的門檻!!!!如需要該系列的工程…

電子電氣架構 --- 汽車軟件全生命周期

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 簡單,單純,喜歡獨處,獨來獨往,不易合同頻過著接地氣的生活,除了生存溫飽問題之外,沒有什么過多的欲望,表面看起來很高冷,內心熱情,如果你身…

力扣面試150(41/150)

7.25 56. 合并區間 以數組 intervals 表示若干個區間的集合,其中單個區間為 intervals[i] [starti, endi] 。請你合并所有重疊的區間,并返回 一個不重疊的區間數組,該數組需恰好覆蓋輸入中的所有區間 。 我的思路: 左端點升序…

【隧道篇 / IPsec】(7.6) ? 01. 利用向導快速建立IPsec安全隧道 (點對點) ? FortiGate 防火墻

【簡介】相信很多人已經習慣利用導向快速創建VPN了,而且已經有部分嘗鮮者已經用上了FortiOS 7.6,但是會發現FortiOS 7.6下的VPN向導改變了很多,一時無法下手,下面我們來看看最常見的點對點是如何配置的。環境介紹在配置IPsec VPN之…

PLLIP核

。1 號紅色框內的速度等級代表著設備的速度 等級,保存默認就好;2 號紅色框內設置輸入頻率;3 號紅色框選擇 PLL 的工作模式。我們 開發板用的晶振是 50MHz 的,故在 2 號紅色框內我們填寫 50MHz;我們在 3 號紅色框內選正…

1.1 Deep learning?pytorch ?深度學習訓練出來的模型通常有效但無法解釋合理性? 如何 解釋?

DL 是什么,你如何理解DL模型? DL 對于我而言,就是人類試圖想通過數學語言描述人類學習過程的一門技術,或者說學科。 因此 DL 模型 相當于 數學 的 一個 funciton ,有輸入,通過function處理,得…

java實現在工具類中注入其他對象方式

方案1: Slf4j Component public class ChatdocApiClient {Value("${chatdoc.app-id}")private String appId;Value("${chatdoc.secret}")private String secret;Value("${chatdoc.domain}")private String domain;private final Rest…

electron中IPC 渲染進程與主進程通信方法解析

electron中ipcRenderer.invoke、ipcRenderer.on、ipcRenderer.send、ipcRenderer.sendSync作用與區別 IPC 渲染進程與主進程通信方法解析 ipcRenderer 的這幾個方法作用不完全相同,它們適用于不同的通信場景,核心區別在于通信方向、是否需要響應以及同步…

epoll_event 事件類型詳解

epoll_event 事件類型詳解 epoll_event 是 Linux epoll I/O 多路復用機制的核心結構體&#xff0c;其中的事件類型決定了 epoll 監控的行為和觸發條件。以下是各種事件類型的詳細解析&#xff1a; epoll_event 結構體 #include <sys/epoll.h>typedef union epoll_data {v…

設計自己的小傳輸協議 導論與概念

設計自己的小傳輸協議 導論與概念 1&#xff1a;聊一聊協議頭設計 ? 早在《TCP/IP詳解》中的第一句話中&#xff0c;我們就知道協議的含義是這樣的&#xff1a;協議是通信雙方共同遵守的一套規則&#xff0c;提供格式定義、語義解釋等&#xff0c;使不同設備或軟件能夠正確交…

iOS —— 天氣預報仿寫總結

在iOS中&#xff0c;最常見的網絡請求方式是NSURLSession&#xff0c;它是蘋果推薦的現代API&#xff0c;簡單安全且易于拓展。一次完整的網絡請求流程&#xff1a;構造 NSURL 對象創建 NSURLSessionDataTask發起請求&#xff08;resume&#xff09;在回調中解析數據回到主線程…

MySQL 8.4 Windows 版安裝記錄與步驟參考

導語&#xff1a; MySQL 作為廣泛使用的開源數據庫管理系統&#xff0c;是許多開發者和學習者的必備工具。最近有朋友詢問安裝過程&#xff0c;正好整理了 MySQL 8.4 在 Windows 系統下的安裝步驟和一些注意事項&#xff0c;分享給有需要的朋友做個參考。關于 MySQL&#xff1a…