安卓:股票筛选及分析系统

17 篇文章 0 订阅

先放一下截的图片

 

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

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

http://q.stock.sohu.com/hisHq?code=cn_string&start=string&end=string&stat=1&order=D&period=d&callback=historySearchHandler&rt=jsonp

这个是请求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<String> handleJson(String br){    
    List<String> SQL2 = new ArrayList<String>() ; 
    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<String> newJson = new ArrayList<String>();
        //先取[[,]]中间的数据
        List<String> 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吧

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

蓝奏云下载

https://www.lanzous.com/i7nhmze

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wenlong Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值