股票應用開發——網路資料的獲取(一)
阿新 • • 發佈:2019-02-17
/** * 從網路獲取資料 * * @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; }
下一篇部落格將會講述:相關指標的含義以及計算,敬請期待!