先放一下截的圖片
這個是主界面截圖,沒有做特別的事
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