HarmonyOS之自选股App

支持在 鸿蒙、安卓、苹果设备上运行。

1.界面效果展示 

                                

                               

                               

2.数据存储

数据存储采用的是官方的  @ohos.data.relationalStore.relationalStore

stock_code表用来存储A股市场5000多家公司的股票代码和名称等信息

const TAB_STOCK_CODE = "stock_code"
const CREATE_TABLE_CODE = "CREATE TABLE IF NOT EXISTS "+TAB_STOCK_CODE+" ("+ "id INTEGER PRIMARY KEY AUTOINCREMENT, "+ "code TEXT , "+ "name TEXT , "+ "market TEXT,"+ "pinyin TEXT ) "

stock_group 表存储 分组信息

const TAB_STOCK_GROUP = "stock_group"
const CREATE_TABLE_GROUP = "CREATE TABLE IF NOT EXISTS "+TAB_STOCK_GROUP+" ("+ "id INTEGER PRIMARY KEY AUTOINCREMENT, "+ "name TEXT , "+ "seq TEXT  ) "

stock_group_code 表存储分组添加的的自选股信息

const CREATE_TABLE_GROUP_CODE = "CREATE TABLE IF NOT EXISTS "+TAB_STOCK_GROUP_CODE+" ("+ "id INTEGER PRIMARY KEY AUTOINCREMENT, "+ "group_id INTEGER , "+ "code TEXT , "+ "market TEXT ,"+ "remark TEXT ,"+ "seq TEXT  ) "

 3.实时股价接口

获取实时股价的免费接口为 

https://qt.gtimg.cn/q=sh600519 ,末尾6位为公司股票代码,sh为上市公司所在市场。可以同时请求多个,中间用逗号分隔,比如 https://qt.gtimg.cn/q=sh600519,sz000858

同时请求贵州茅台和五粮液的实时价格。

浏览器发起请求返回的数据如下:

v_sh600519="1~贵州茅台~600519~1541.50~1555.00~1532.29~48318~23653~24665~1541.50~10~1541.37~1~1541.33~4~1541.20~8~1541.13~1~1541.98~2~1541.99~3~1542.00~10~1542.01~1~1542.05~6~~20240617160005~-13.50~-0.87~1548.77~1511.01~1541.50/48318/7400883243~48318~740088~0.38~24.82~~1548.77~1511.01~2.43~19364.29~19364.29~8.08~1710.50~1399.50~1.04~2~1531.70~20.12~25.91~~~0.74~740088.3243~0.0000~0~ ~GP-A~-10.69~-4.80~2.92~32.54~28.33~1915.89~1511.01~-6.49~-10.12~-10.25~1256197800~1256197800~4.35~-14.40~1256197800~~~-12.05~-0.04~~CNY~0~___D__F__N~1541.00~30"; 

 在 HarmonyOS平台上,由于中文会乱码,数据用~分隔会有问题,因此需要将返回结果通过 字符串的  reverse 方法进行反转,这样乱码的中文就到了字符串的末尾位置

;"03~00.1451~N__F__D___~0~YNC~~40.0-~50.21-~~~0087916521~04.41-~53.4~0087916521~0087916521~52.01-~21.01-~94.6-~10.1151~98.5191~33.82~45.23~29.2~08.4-~96.01-~A-PG~ ~0~0000.0~3423.880047~47.0~~~19.52~21.02~07.1351~2~40.1~05.9931~05.0171~80.8~92.46391~92.46391~34.2~10.1151~77.8451~~28.42~83.0~880047~81384~3423880047/81384/05.1451~10.1151~77.8451~78.0-~05.31-~50006171604202~~6~50.2451~1~10.2451~01~00.2451~3~99.1451~2~89.1451~1~31.1451~8~02.1451~4~33.1451~1~73.1451~01~05.1451~56642~35632~81384~92.2351~00.5551~05.1451~915006~台茅州贵~1"=915006hs_v

反转之后,用~切割

 const ele: Array<string> = item.split('~').reverse()let chg:number = parseFloat(ele[83]) - parseFloat(ele[82])let _chg:string = chg.toFixed(2)let percent = chg/parseFloat(ele[82])*100;

反转后下标 83的位置为实时股价,82的位置为昨天的收盘价,相减计算出实时的涨跌百分比。 

4. 换肤 

使用 @Provide注解以及  @Consume注解 声明了变量 isDark来实现换肤的功能,实现整个App的主题颜色在黑暗色和明亮色之间切换。

5.注意事项

数据请求采用 第三方 axios 轻松搞定。

注意 axios 和 relationalStore 不支持在 PreViewer里面运行,.因此只能将工程编译为Android项目后,在AndroidStudio里面打包完成之后,安装在Android手机上来 看真实的效果。

6.使用说明

App安装成功之后,初次打开会将 5000多家上市公司的数据插入 stock_code表。

然后需要在分组模块 新建分组,保存后在自选模快就能看到刚刚新建的分组,点击对应分组下面的【添加】按钮就能添加自选股了。

7.代码

代码已上传到Gitee,地址 https://gitee.com/xukongjing/ark_ui_stock.git

代码克隆到本地以后,在项目的 .arkui-x/android/app/release目录下,放置着我打包好的android安装包,可以优先体验。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/29170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为企业提供动力:用于大型组织的WordPress

可扩展且灵活的架构可通过主题、插件和集成进行定制内置 SEO 功能和营销功能内容管理和协作工具支持多站点安装托管解决方案和面向平台的提供商采用现代前端技术的 Headless CMS 功能 拥有强大、灵活且可扩展的内容管理系统 (CMS) 对于大型组织至关重要。作为最受欢迎和广泛使用…

双层循环和循环控制语句的使用,以及while和until的语法使用

echo 打印 -n 表示不换行输出 -e 输出转义字符 /b&#xff1a;相当于退格键&#xff08;backspace&#xff09; /n&#xff1a; 换行&#xff0c;相当于回车 /f&#xff1a; 换行&#xff0c;换行后的新行的开头连着上一行的行尾 /t&#xff1a; 相当于tab键 又叫做横向制…

input输入框的前缀和后缀

案例&#xff1a;前缀插槽 核心&#xff1a; <template #prefix><user-outlined /> </template><script setup> import {ref, watch} from "vue"; import {UserOutlined} from "ant-design/icons-vue";const value ref("&…

springboot与flowable(3):启动、审批、各个Service服务

一、启动流程 流程定义与实例的关系类似于Java的类与对象&#xff0c;通过定义的id创建流程实例&#xff0c;编写测试代码&#xff1a; package org.example.flowabledemo2;import org.flowable.engine.RuntimeService; import org.flowable.engine.runtime.ProcessInst…

浅谈Promise、Async和Await

Promise 1、Promise 是异步编程的一种解决方案&#xff0c;本质是一个构造函数。使用Promise&#xff0c;可以避免“回调地狱”&#xff0c;即多层嵌套的回调函数&#xff0c;从而使代码更加清晰和易于维护 2、有三种状态&#xff1a;pending&#xff08;进行中&#xff09;、f…

Github上前十大开源Rust项目

在github上排名前十的Rust开源项目整理出来与大家共享&#xff0c;以当前的Star数为准。 Deno Deno 是 V8 上的安全 TypeScript 运行时。Deno 是一个建立在V8、Rust和Tokio之上的 JavaScript、TypeScript 和 WebAssembly 的运行时环境&#xff0c;具有自带安全的设置和出色的开…

Pikachu靶场--XSS

参考借鉴 Pikachu靶场之XSS漏洞详解_pikachu xss-CSDN博客 【皮卡丘03】一个视频讲清楚XSS跨站脚本_bilibili 反射型xss(get) 输入payload&#xff1a;<script>alert(123)</script> 解决一&#xff1a;在URL框内输入 解决二&#xff1a;修改最大长度 再次输入paylo…

【秋招突围】2024届秋招笔试-小红书笔试题-第三套-三语言题解(Java/Cpp/Python)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系计划跟新各公司春秋招的笔试题 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f4e7; 清隆这边…

YOLOV1-V3详细介绍(新手向、超详细)

本文主要是根据我自己的学习情况来进行讲解&#xff0c;以一个初学者的角度进行阐释&#xff0c;如果有更深层次的点没有涉及到&#xff0c;还请大家多多包涵。 目录 计算机视觉 主流算法 Two-stage&#xff08;双阶段&#xff09; One-stage&#xff08;单阶段&#xff09; …

Apache Doris 全新分区策略 Auto Partition 应用场景与功能详解 | Deep Dive系列

编辑&#xff1a;SelectDB 技术团队 在当今数据驱动的时代&#xff0c;如何高效、有序地管理数据库中的海量数据成为挑战。为了处理庞大的数据集&#xff0c;分布式数据库引入了类似分区和分桶策略&#xff0c;通过将数据按特定规则划分成较小的单位并分布到不同节点上&#x…

时间序列论文标准数据集

需要的同学私信联系&#xff0c;推荐关注上面图片右下角的订阅号平台 自取下载。 随着时间序列问题的复杂度逐渐提高&#xff0c;研究者们开始关注非线性和多变量问题。近年来&#xff0c;时间序列领域涌现出众多基于深度学习的先进框架&#xff0c;如Transformer、GNN、TCN、…

示例:WPF中TreeView自定义TreeNode泛型绑定对象来实现级联勾选

一、目的&#xff1a;在绑定TreeView的功能中经常会遇到需要在树节点前增加勾选CheckBox框&#xff0c;勾选本节点的同时也要同步显示父节点和子节点状态 二、实现 三、环境 VS2022 四、示例 定义如下节点类 public partial class TreeNodeBase<T> : SelectBindable<…

java如何实现字符串替换

java要把指定的字符序列替换为新的字符序列&#xff0c;可以用replace语句 语法如下 str.replace(老字符序列,新字符序列) 这个语句最后是返回替换后的新字符串 示例代码如下 public class Stringreplace {public static void main(String[] args) {String str"登陆功…

clickhouse日常使用

ck高阶函数运用 数组函数 对数据中的特殊字符串进行替换&#xff0c;并根据分隔符进行切割&#xff0c;过滤掉为空的数组数据&#xff0c;对数据元素进行排序&#xff0c;在用分隔符拼接。 arrayStringConcat( arraySort( arrayDistinct( arrayFilter(o -> o ! , sp…

AI存储解决案例分享

AI数据管道&#xff08;Data Pipeline&#xff09;是指在AI项目中&#xff0c;数据从原始状态到最终可用模型的整个处理流程&#xff0c;包括数据采集、清洗、转换、分析、训练模型、验证模型直至部署和监控等多个环节。 在AI训练和推理过程中&#xff0c;多个管道可能同时读取…

使用 C# 进行面向对象编程:第 10 部分

封装和抽象之间的区别 对于 OOP 初学者来说&#xff0c;封装和抽象之间存在非常基本的区别。他们可能会对此感到困惑。但如果你详细了解这两个主题&#xff0c;就会发现它们之间存在巨大差异。 抽象意味着向用户隐藏不必要的数据。用户只需要所需的功能或根据其需求的输出。例…

Redis学习(11)|Redis键值管理与Spring Boot集成实战

文章目录 引言Redis键值管理概述Spring Boot中使用`RedisTemplate`进行键值管理结论键的生命周期管理,TTL(Time To Live)和过期策略,以及如何批量处理键。 引言 Redis是一款高性能的键值存储系统,以其速度、灵活性和丰富的数据结构而著称。键值管理是Redis的核心功能之一…

Flask-RQ

Flask-RQ库教程 Flask-RQ 是一个用于在 Flask 应用中集成 RQ&#xff08;Redis Queue&#xff09;的扩展。RQ 是一个简单的 Python 库&#xff0c;用于将任务排入 Redis 队列并异步执行这些任务。这对于处理长时间运行的任务&#xff08;如发送电子邮件、生成报告等&#xff0…

修改ppt注册表,导出高分辨率图片

参考&#xff1a;PPT中导出高分辨率图片的方法 修改ppt注册表&#xff0c;导出高分辨率图片&#xff1a;【具体步骤】 1、运行-输入regedit&#xff0c;打开注册表编辑器&#xff1b; 2、找到ppt中选项&#xff0c;按下面路径找。 3、鼠标右键新建-DWORD(32位)(D)&#xff0c…

Python对象复制竟然有这么多种方式,赶紧学起来!

目录 1、浅拷贝:copy模块的copy()函数 📋 1.1 浅拷贝原理揭秘 1.2 实战演示:列表与字典的浅拷贝 列表浅拷贝示例 字典浅拷贝示例 1.3 注意事项:共享引用与独立对象 2、深拷贝:copy模块的deepcopy()函数 📌 2.1 深拷贝实现机制解析 2.2 深拷贝优势分析 2.3 深度…