支持在 鸿蒙、安卓、苹果设备上运行。
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安装包,可以优先体验。