鸿蒙多功能工具箱开发实战(十六)-实时行情数据获取与展示
鸿蒙多功能工具箱开发实战(十六)-实时行情数据获取与展示前言实时行情数据展示需要网络请求和数据刷新机制。本文将讲解HarmonyOS网络请求API和行情数据展示的实现。一、网络请求封装1.1 HTTP服务封装importhttpfromohos.net.httpexportclassHttpService{privatestaticinstance:HttpServiceprivatehttpClient:http.HttpClientprivateconstructor(){this.httpClienthttp.createHttp()}staticgetInstance():HttpService{if(!HttpService.instance){HttpService.instancenewHttpService()}returnHttpService.instance}/** * GET请求 */asyncgetT(url:string,params?:Recordstring,string):PromiseT{constfullUrlparams?${url}?${this.stringifyParams(params)}:urlreturnnewPromise((resolve,reject){this.httpClient.request(fullUrl,{method:http.RequestMethod.GET,header:{Content-Type:application/json},connectTimeout:60000,readTimeout:60000},(err,data){if(err){reject(err)}else{try{constresultJSON.parse(data.resultasstring)asTresolve(result)}catch(e){reject(e)}}})})}privatestringifyParams(params:Recordstring,string):string{returnObject.entries(params).map(([k,v])${encodeURIComponent(k)}${encodeURIComponent(v)}).join()}}1.2 行情数据接口exportinterfaceGoldPrice{date:stringprice:numberchange:numberchangePercent:number}exportinterfaceExchangeRate{from:stringto:stringrate:numberupdateTime:string}exportclassMarketService{privatehttpHttpService.getInstance()/** * 获取今日金价 */asyncgetGoldPrice():PromiseGoldPrice{// 模拟数据实际应调用真实APIreturn{date:newDate().toLocaleDateString(),price:580.50,change:2.30,changePercent:0.40}}/** * 获取实时汇率 */asyncgetExchangeRates():PromiseExchangeRate[]{// 模拟数据return[{from:USD,to:CNY,rate:7.2456,updateTime:newDate().toLocaleString()},{from:EUR,to:CNY,rate:7.8912,updateTime:newDate().toLocaleString()},{from:GBP,to:CNY,rate:9.1234,updateTime:newDate().toLocaleString()},{from:JPY,to:CNY,rate:0.0482,updateTime:newDate().toLocaleString()}]}}二、数据刷新机制2.1 定时刷新Componentstruct MarketPage{StategoldPrice:GoldPricenullStateexchangeRates:ExchangeRate[][]StateisLoading:booleanfalseStatelastUpdate:stringprivatemarketServicenewMarketService()privaterefreshInterval:numbernullaboutToAppear(){this.loadData()// 每30秒刷新一次this.refreshIntervalsetInterval((){this.loadData()},30000)}aboutToDisappear(){if(this.refreshInterval){clearInterval(this.refreshInterval)}}asyncloadData(){this.isLoadingtruetry{this.goldPriceawaitthis.marketService.getGoldPrice()this.exchangeRatesawaitthis.marketService.getExchangeRates()this.lastUpdatenewDate().toLocaleTimeString()}catch(e){console.error(加载数据失败:,e)}finally{this.isLoadingfalse}}build(){Column(){NavBar({title:实时行情})// 下拉刷新Refresh({refreshing:$$this.isLoading}){Column(){// 金价展示this.GoldPriceCard()// 汇率列表this.ExchangeRateList()// 更新时间Text(最后更新:${this.lastUpdate}).fontSize(12).fontColor(#999999).margin({top:16})}}.onRefreshing((){this.loadData()})}}BuilderGoldPriceCard(){Column(){Row(){Text(今日金价).fontSize(16)Text(this.goldPrice?.date||).fontSize(12).fontColor(#999999)}.width(100%).justifyContent(FlexAlign.SpaceBetween)Text(¥${this.goldPrice?.price?.toFixed(2)||--}).fontSize(36).fontWeight(FontWeight.Bold).margin({top:16})Row(){Text(${this.goldPrice?.change0?:}${this.goldPrice?.change?.toFixed(2)||--}).fontColor(this.goldPrice?.change0?#E74C3C:#27AE60)Text((${this.goldPrice?.changePercent?.toFixed(2)}%)).fontColor(this.goldPrice?.change0?#E74C3C:#27AE60)}.margin({top:8})}.width(90%).padding(24).backgroundColor(#FFFFFF).borderRadius(12).margin({top:16})}}三、高级功能3.1 数据流程图是否发起HTTP请求接收响应数据解析JSON数据验证数据有效?更新UI状态显示错误信息启动定时器等待刷新3.2 错误处理classQuoteService{privatestaticMAX_RETRY3privatestaticretryCount0staticasyncfetchWithRetry(url:string):PromiseQuoteData{try{constresponseawaithttp.request(url)this.retryCount0returnthis.parseResponse(response)}catch(error){this.retryCountif(this.retryCountthis.MAX_RETRY){awaitthis.delay(1000*this.retryCount)returnthis.fetchWithRetry(url)}thrownewError(数据获取失败)}}}3.3 数据缓存classQuoteCache{privatestaticcache:Mapstring,{data:QuoteData,time:number}newMap()privatestaticTTL30000// 30秒staticget(key:string):QuoteData|null{constitemthis.cache.get(key)if(!item)returnnullif(Date.now()-item.timethis.TTL){this.cache.delete(key)returnnull}returnitem.data}staticset(key:string,data:QuoteData){this.cache.set(key,{data,time:Date.now()})}}四、界面优化4.1 行情卡片Componentstruct QuoteCard{Propquote:QuoteDatabuild(){Column(){Row(){Text(this.quote.name).fontSize(16)Blank()Text(this.quote.code).fontSize(12).fontColor(#999)}Row(){Text(¥${this.quote.price.toFixed(2)}).fontSize(24).fontColor(this.quote.change0?#E74C3C:#27AE60)Text(${this.quote.change0?:}${this.quote.changePercent.toFixed(2)}%).fontColor(this.quote.change0?#E74C3C:#27AE60)}.margin({top:8})}.padding(16).backgroundColor(#FFF).borderRadius(8)}}图 1 今日金价界面展示五、单元测试describe(QuoteService,(){it(should fetch quote data,async(){constdataawaitQuoteService.fetch(000001)expect(data.price).toBeGreaterThan(0)})})六、小结本文详细讲解了实时行情功能✅ HTTP请求封装✅ 行情数据接口✅ 定时刷新机制✅ 下拉刷新✅ 数据展示✅ 错误处理✅ 数据缓存✅ 单元测试系列文章导航下期预告鸿蒙多功能工具箱开发实战(十七)-每日语录与天气查询

相关新闻

Ubuntu文件系统与存储管理

Ubuntu文件系统与存储管理

Ubuntu文件系统与存储管理 一、文件系统概述 1.1 什么是文件系统 文件系统是操作系统用于组织和管理文件和目录的方法和数据结构。它负责: 文件存储:将文件存储在磁盘上 文件检索:快速查找和访问文件 空间管理:分配和释放磁盘空间 权限管理:控制文件的访问权限 1.2 Ubu…

2026/10/15 20:53:58 阅读更多 →
LabVIEW部署Web服务

LabVIEW部署Web服务

目录LabVIEW部署Web服务1、创建项目2、创建Web服务3、新建WebVI3.1、使用GET方法3.2、使用POST方法4、 部署和对应URL4.1、应用程序:80804.2、本地调试:80094.3、NI Web服务器:9090(禁用)5、测试5.1、测试GET方法5.2、测试POST方法6、实际应用…

2026/10/15 20:54:04 阅读更多 →
microPython搭建webServer--(一)使用microdot库实现基本页面显示

microPython搭建webServer--(一)使用microdot库实现基本页面显示

1. 准备工作 硬件:esp32s3 软件:MicroPython v1.24.1,使用thonny编程。microdot库可以到github或者gitee下载,只需要microdot.py就可以了。 2. 热点 将esp32作为热点,手机连接该热点后访问默认页面 import network # 创…

2026/10/16 16:41:31 阅读更多 →

最新新闻

CentOS 6.5 虚拟机安装与 Oracle 10g 部署完整指南

CentOS 6.5 虚拟机安装与 Oracle 10g 部署完整指南

简介:这份文档面向需要在虚拟机中搭建Linux开发或测试环境的技术人员,聚焦CentOS 6.5-x86_64系统的完整部署流程。内容从基础操作系统安装讲起,涵盖静态IP网络配置、VMware虚拟工具安装、mpiag与oracle用户创建,以及SSH、FTP、tel…

2026/10/16 23:59:23 阅读更多 →
聚宽策略迁移到QMT自动交易的6步落地实践

聚宽策略迁移到QMT自动交易的6步落地实践

简介:本资源面向量化交易初学者与聚宽平台用户,解决聚宽本身不支持自动化实盘交易的核心痛点,提供一套基于QMT系统的中转方案,需配合券商开通QMT权限使用。压缩包共5个文件,含2个核心Python脚本(分别实现聚…

2026/10/16 23:59:23 阅读更多 →
电商价格监控实战:Python2+requests+sqlite3与代理池避坑指南

电商价格监控实战:Python2+requests+sqlite3与代理池避坑指南

简介:一套基于Python2的电商价格监控项目,面向需要追踪商品降价动态的网购用户、电商运营者以及Python爬虫学习者。项目通过requests库抓取电商页面,结合SQLite保存商品与历史价格,并借助代理池规避反爬限制;当价格低于…

2026/10/16 23:59:23 阅读更多 →
Redis高频面试题全梳理:从底层原理到高可用架构

Redis高频面试题全梳理:从底层原理到高可用架构

很多准备面试的朋友一提到 Redis,第一反应都是“简单,背一背就完事了”。结果真到了现场,面试官一句“Redis为什么这么快”就能把人问住,再追问一句“那它单线程为什么还能这么快”,很多人就开始语无伦次了。其实Redis…

2026/10/16 23:58:21 阅读更多 →
ArcGIS Sptools工具箱:高效处理空间数据的Python脚本集合

ArcGIS Sptools工具箱:高效处理空间数据的Python脚本集合

简介:ArcGIS Sptools工具箱是一套面向GIS专业人员的ArcGIS插件级扩展工具集,专为提升地理数据批量处理、地图样式定制与辅助分析效率而设计,适用于ArcGIS Desktop/Pro用户及中高级GIS项目开发者。资源包共389个文件,含21个可直接加…

2026/10/16 23:57:20 阅读更多 →
IMS计费标准3GPP TS 32.260详解:离线在线计费与ICID机制

IMS计费标准3GPP TS 32.260详解:离线在线计费与ICID机制

简介:本资源为3GPP TS 32.260 IMS计费技术规范的中文版PDF文档,面向从事移动通信核心网计费系统研发、测试与运维的工程师,以及需要理解IMS计费机制的通信专业学生与研究人员。文档系统梳理了IMS离线计费、在线计费与融合计费三种架构&#x…

2026/10/16 23:53:18 阅读更多 →

日新闻

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →