博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓:股票筛选及分析系统
阅读量:4220 次
发布时间:2019-05-26

本文共 7274 字,大约阅读时间需要 24 分钟。

先放一下截的图片

 

这个是主界面截图,没有做特别的事

1.按顺序来说,先说下搜索的接口

这个是请求json数据的,严格意义上返回的参数没有key,需要对字符处理一下 加key是比较好的选择,我下面那个数据表就是listview通过解析json出来的

比如源数据是这样的

historySearchHandler([{"status":0,"hq":[["2019-11-22","5.57","5.52","-0.03","-0.54%","5.47","5.64","97808","5408.12","0.59%"],["2019-11-21","5.40","5.55","0.11","2.02%","5.40","5.56","116753","6427.19","0.71%"],["2019-11-20","5.33","5.44","0.10","1.87%","5.31","5.49","127158","6907.36","0.77%"],["2019-11-19","5.30","5.34","0.04","0.75%","5.28","5.34","45511","2419.34","0.27%"],["2019-11-18","5.25","5.30","0.03","0.57%","5.22","5.31","36339","1916.53","0.22%"],["2019-11-15","5.27","5.27","-0.01","-0.19%","5.24","5.31","34165","1801.34","0.21%"],["2019-11-14","5.24","5.28","0.03","0.57%","5.22","5.32","47249","2489.75","0.29%"],["2019-11-13","5.27","5.25","-0.05","-0.94%","5.22","5.30","49346","2591.38","0.30%"]],"code":"cn_600395","stat":["累计:","2019-10-24至2019-11-22","0.37","7.18%",5.13,5.64,1310238,70007.95,"7.93%"]}])

其中黄色部分为我们需要的数据,可以用下面这个正则表达式取出来

public static List
handleJson(String br){ List
SQL2 = new ArrayList
() ; Matcher m = Pattern.compile("\\[\\[(.*?)\\]\\]").matcher(br); while (m.find()) { String[] a = m.group(1).toString().split("\\],\\["); for(String s:a){ SQL2.add(s); } } return SQL2; }

我这边写了一个数据处理的函数,调用数据后返回的就是处理好的字符串,最后通过实体类+适配器将数据写到list view

private String DataManipulation(String jsonRes) {//处理字符串//        String M1 = jsonRes.replace("[\"","{\"");//        String M2 = M1.replace("\"]","\"}");//        String M3[] = M2.split("historySearchHandler\\(");//        String M4[] = M3[1].split("\\)");//        Log.i("response===========>",M4[0]);        //取json部分        int begin = jsonRes.indexOf('(');        int end = jsonRes.indexOf(')');        String jsonData = jsonRes.substring(begin + 1, end);        //String name =jsonRes.substring(0, begin);        //数据格式化好后拼接数据        List
newJson = new ArrayList
(); //先取[[,]]中间的数据 List
handleJson = GetJson.handleJson(jsonData); String message = null; for (int i = 0; i < handleJson.size(); i++) { String str = (String) handleJson.get(i); String[] list = str.split(","); //此时的数据 //"2019-10-24","5.15","5.15","0.00","0.00%","5.13","5.17","27934","1439.52","0.17%" //格式化数据 // String message=String.format("[%02d]:%6s-%4s,今日涨幅%6s%%并连涨3日,今昨量比:%4.2f,(今)月内最大量比:%4.2f,今昨前换手率:%4.2f,%4.2f,%4.2f",i,list[2],list[3],list[4],list[5],list[6],list[7],list[8],list[9]); message = "{\"cyp_data\":" + list[0] + ",\"cyp_opening\":" + list[1] + ",\"cyp_closing\":" + list[2] + ",\"cyp_updown\":" + "" + list[3] + ",\"cyp_amount\":" + list[4] + ",\"cyp_minimum\":" + list[5] + ",\"cyp_tallest\":" + list[6] + ",\"cyp_transaction\":" + list[7] + ",\"cyp_business\":" + list[8] + ",\"cyp_rate\":" + list[9] + "}"; //数据拆分为数组,通过下标拼接字符 //handler 发送进行拼接 //System.out.println(message); newJson.add(i, message); } //List转Json String str = JSON.toJSONString(newJson); //System.out.println(str); //Log.i("str===========>",str); String str1 = str.replace("\\\"", "\""); String str2 = str1.replace("[\"", "["); String str3 = str2.replace("\"]", "]"); String str4 = str3.replace("}\",\"{","},{"); //Log.i("str===========>",str4); return str4; }

2.接下来说下k线的接口,这个k线其实是gif图,用显示网络图片的工具类就可以直接显示出来

package com.shuchuwenku.avbox.ImageUtil;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.widget.ImageView;import android.widget.Toast;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;@SuppressLint("AppCompatCustomView")public class  NetworkImageView extends ImageView {    public static final int GET_DATA_SUCCESS = 1;    public static final int NETWORK_ERROR = 2;    public static final int SERVER_ERROR = 3;    //子线程不能操作UI,通过Handler设置图片    private Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {           switch (msg.what){               case GET_DATA_SUCCESS:                   Bitmap bitmap = (Bitmap) msg.obj;                   setImageBitmap(bitmap);                   break;               case NETWORK_ERROR:                   Toast.makeText(getContext(),"网络连接失败",Toast.LENGTH_SHORT).show();                   break;               case SERVER_ERROR:                   Toast.makeText(getContext(),"服务器发生错误",Toast.LENGTH_SHORT).show();                   break;           }        }    };    public NetworkImageView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    public NetworkImageView(Context context) {        super(context);    }    public NetworkImageView(Context context, AttributeSet attrs) {        super(context, attrs);    }    //设置网络图片    public void setImageURL(final String path) {        //开启一个线程用于联网        new Thread() {            @Override            public void run() {                try {                    //把传过来的路径转成URL                    URL url = new URL(path);                    //获取连接                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();                    //使用GET方法访问网络                    connection.setRequestMethod("GET");                    //超时时间为10秒                    connection.setConnectTimeout(10000);                    //获取返回码                    int code = connection.getResponseCode();                    if (code == 200) {                        InputStream inputStream = connection.getInputStream();                        //使用工厂把网络的输入流生产Bitmap                        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);                        //利用Message把图片发给Handler                        Message msg = Message.obtain();                        msg.obj = bitmap;                        msg.what = GET_DATA_SUCCESS;                        handler.sendMessage(msg);                        inputStream.close();                    }else {                        //服务启发生错误                        handler.sendEmptyMessage(SERVER_ERROR);                    }                } catch (IOException e) {                    e.printStackTrace();                    //网络连接错误                    handler.sendEmptyMessage(NETWORK_ERROR);                }            }        }.start();    }}

 * 从sina获取所有股票代码 

 *获取日K线 
 *http://image.sinajs.cn/newchart/daily/n/sh601006.gif
 *获取分时线
 *http://image.sinajs.cn/newchart/min/n/sh000001.gif
 *获取周K线
 *http://image.sinajs.cn/newchart/weekly/n/sh000001.gif
 *月K线查询:
 *http://image.sinajs.cn/newchart/monthly/n/sh000001.gif

SH+股票代码就可以,比如601006就是股票代码

3.接下来就是一些登录的操作

我就直接简述一下,建两个数据库,一个专门存放用户名+密码,一个要有用户名+数据(股票代码列,开始日期,结束日期),点击收藏的时候直接通过listview选出来就行

验证是否已经登录,就看用户数据库有没有数据对应就可以了,毕竟没有联网做校验,简单一点就可以,

退出登录--清空用户数据表

4.股票分析

我没研究股票,不清楚怎么分析,应该要结合市场情况和新闻分析,做个傻瓜示的数据实现就简单了,将数据存入数据库,再通过sql语句进行筛选,然后返回数据就行了

最后这个程序我发个demo吧

毕竟是个半成品,其他功能实现其实很简单

蓝奏云下载

 

 

转载地址:http://zdhmi.baihongyu.com/

你可能感兴趣的文章
善行天下,大爱无疆 ——云创再次获赠爱心锦旗!
查看>>
热烈祝贺刘鹏教授膺选第45届世界技能大赛云计算赛事中国赛区裁判长!
查看>>
云创大数据求贤若渴,市场精英请来揭榜
查看>>
图解YU12、I420、YV12、NV12、NV21、YUV420P、YUV420SP、YUV422P、YUV444P的区别
查看>>
QNX简介
查看>>
MQTT协议基本介绍
查看>>
进程和线程是操作系统基本概念,了解一下
查看>>
SSL与TLS的区别以及介绍
查看>>
HTTPS、TLS、SSL、HTTP区别和关系
查看>>
Kafka 入门三问
查看>>
c/c++ 内存泄漏检测,开源工具valgrind使用整理
查看>>
RTSP协议、RTMP协议、HTTP协议的区别
查看>>
h264 sps pps详解
查看>>
AAC的ADTS头信息介绍
查看>>
MediaMuxer和MediaExtractor类(音频和视频数据的混合和分离)
查看>>
Linux下zip加密压缩
查看>>
Java中的ReentrantLock和synchronized两种锁定机制的对比
查看>>
视频会议及流媒体十大开源项目
查看>>
adb 用法大全
查看>>
经常用到的Android UI、开源项目及库
查看>>