先放一下截的图片
这个是主界面截图,没有做特别的事
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<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