本文共 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 ListhandleJson(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); //数据格式化好后拼接数据 ListnewJson = 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/