安卓:股票篩選及分析系統

先放一下截的圖片

 

這個是主界面截圖,沒有做特別的事

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章