1. 程式人生 > >股票應用開發——網路資料的獲取(一)

股票應用開發——網路資料的獲取(一)

/**
     * 從網路獲取資料
     *
     * @return InputStream
     */
    private InputStream getData() {
        InputStream is = null;
        HttpURLConnection conn = null;//建立網路連結物件
        try {
            URL u = new URL("API資料介面");//建立url物件
            conn = (HttpURLConnection) u.openConnection();//建立網路連結物件
            conn.setRequestMethod("GET");//設定網路請求方式;
            conn.setDoInput(true);//允許輸入流,下載;
            conn.setUseCaches(false);
            conn.setConnectTimeout(5000);//設定網路連線時間
            int code = conn.getResponseCode();//獲取網路請求的響應碼;
            Log.i("tag", "ParserUtil..code:" + code);
            if (code == 200) {//說明網路請求成功
                is = conn.getInputStream();//獲取檔案的輸入流

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return is;//返回流
    }
    /**
     * PULL解析從網路獲取的資料
     *
     * @return List
     */
    public List parserData() {
        //建立XmlPullParser 例項
        XmlPullParser xpp = Xml.newPullParser();
        InputStream mInputStream = getData();
        try {
            //設定輸入流並標明編碼方式
            if (mInputStream != null){
                xpp.setInput(mInputStream, "UTF-8");
                //產生第一個事件
                int eventType = xpp.getEventType();

                while (eventType != XmlPullParser.END_DOCUMENT) {
                    switch (eventType) {

                        case XmlPullParser.START_DOCUMENT: //判斷當前事件是否為開始事件
                            mList = new ArrayList();//初始化集合
                            break;

                        case XmlPullParser.START_TAG://判斷但前事件是否為標籤元素的開始事件
                            if (xpp.getName().equals("data")) {// 判斷開始標籤元素是否是data
                                stockInfo = new StockInfo();//初始化物件
                            } else if (xpp.getName().equals("date")) {//date
                                eventType = xpp.next();//讓解析器指向date屬性的值
                                stockInfo.setDate(xpp.getText());//date賦值
                            } else if (xpp.getName().equals("open")) {//open
                                eventType = xpp.next();//讓解析器指向open屬性的值
                                stockInfo.setOpen(Float.valueOf(xpp.getText()));//open賦值

                            } else if (xpp.getName().equals("close")) {//close
                                eventType = xpp.next();//讓解析器指向close屬性的值
                                stockInfo.setClose(Float.valueOf(xpp.getText()));//close賦值

                            } else if (xpp.getName().equals("high")) {//high
                                eventType = xpp.next();//讓解析器指向high屬性的值
                                stockInfo.setHigh(Float.valueOf(xpp.getText()));//high賦值

                            } else if (xpp.getName().equals("low")) {//low
                                eventType = xpp.next();//讓解析器指向low屬性的值
                                stockInfo.setLow(Float.valueOf(xpp.getText()));//low賦值

                            } else if (xpp.getName().equals("volume")) {//volume
                                eventType = xpp.next();//讓解析器指向volume屬性的值
                                stockInfo.setVolume(xpp.getText());//volume賦值

                            } else if (xpp.getName().equals("turnover")) {//turnover
                                eventType = xpp.next();//讓解析器指向turnover屬性的值
                                stockInfo.setTurnover(xpp.getText());//turnover賦值

                            }
                            break;
                        case XmlPullParser.END_TAG://判斷當前事件是否為標籤元素結束事件
                            if (xpp.getName().equals("data")) {// 判斷開始標籤元素是否是data
                                mList.add(stockInfo);//物件新增進集合
                                stockInfo = null;
                            }
                            break;

                    }
                    // 進入下一個元素並觸發相應事件
                    eventType = xpp.next();

                }
                return mList;
            }
            return null;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
//            Log.i("tag", "ParserUtil..mlist:" + mList.size() + getTime());
        }
        return null;

    }


下一篇部落格將會講述:相關指標的含義以及計算,敬請期待!