http://www.chenwg.com/technology/android/59-flight-search.html

在网上发现一个接口,是关于航班查询的,http://webservice.webxml.com.cn/webservices/DomesticAirline.asmx ,而这又与web service的知识有关,所以就写一个简单的例子。

看看这个接口文档,返回的数据是xml格式的,所以我们要将返回的xml格式的数据进行解析,解析我选择Android自带的pull解析。

创建一个Android工程,在src下新建一个flight.xml文件,内容如下:

<!--?xml version="1.0" encoding="utf-8"?--><soap:envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:body><?XML:NAMESPACE PREFIX = [default] http://WebXml.com.cn/ NS = "http://WebXml.com.cn/" /><getdomesticairlinestime xmlns="http://WebXml.com.cn/"><startcity>startCityTmp</startcity><lastcity>lastCityTmp</lastcity><thedate></thedate><userid></userid></getdomesticairlinestime></soap:body></soap:envelope>

新建一个Flight类,数据参考返回的数据,代码如下:

public class Flight {private String company;private String airlineCode;private String startDrome;private String arriveDrome;private String startTime;private String arriveTime;private String mode;private String airlineStop;private String week;//省略getter和setter方法}


创建FlightsService类,实现航班时刻查询.创建FlightsService类,实现航班时刻查询.创建FlightsService类,实现航班时刻查询

public class FlightsService {/*** 获取航班時刻表* * @param startCity* 出發城市* @param lastCity* 到達城市* @return* @throws Exception*/public static String getFlight(String startCity, String lastCity)throws Exception {//设置网络代理,如果你不是使用代理上网,就将这两行注释掉即可System.setProperty("http.proxyHost", "10.123.74.137");System.setProperty("http.proxyPort", "808");String soap = readSoap();soap = soap.replaceAll("startCityTmp", startCity);soap = soap.replaceAll("lastCityTmp", lastCity);byte[] entity = soap.getBytes();String path = "http://webservice.webxml.com.cn/webservices/DomesticAirline.asmx";HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod("POST");conn.setDoOutput(true);conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");conn.setRequestProperty("Content-Length", String.valueOf(entity.length));conn.getOutputStream().write(entity);if (conn.getResponseCode() == 200) {return parseSOAP(conn.getInputStream());}return null;}/** <!--?xml version="1.0" encoding="utf-8"?--><soap:envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:body><?XML:NAMESPACE PREFIX = [default] http://WebXml.com.cn/ NS = "http://WebXml.com.cn/" /><getdomesticairlinestime xmlns="http://WebXml.com.cn/"><startcity>string</startcity><lastcity>string</lastcity><thedate>string</thedate><userid>string</userid></getdomesticairlinestime></soap:body></soap:envelope>*/private static String parseSOAP(InputStream xml) throws Exception {// ListList<flight> flightList = null;Flight flight = null;//使用Android提供的工具类创建pullParser解析器XmlPullParser pullParser = Xml.newPullParser();pullParser.setInput(xml, "UTF-8");//触发第一个事件int event = pullParser.getEventType();//解析xml,文档没结束就一直处理while (event != XmlPullParser.END_DOCUMENT) {switch (event) {case XmlPullParser.START_DOCUMENT://初始化flightlistflightList = new ArrayList<flight>();break;case XmlPullParser.START_TAG://遇到要处理的标签就处理if ("AirlinesTime".equals(pullParser.getName())) {flight = new Flight();} else if ("Company".equals(pullParser.getName())) {flight.setCompany(pullParser.nextText());} else if ("AirlineCode".equals(pullParser.getName())) {flight.setAirlineCode(pullParser.nextText());} else if ("StartDrome".equals(pullParser.getName())) {flight.setStartDrome(pullParser.nextText());} else if ("ArriveDrome".equals(pullParser.getName())) {flight.setArriveDrome(pullParser.nextText());} else if ("StartTime".equals(pullParser.getName())) {flight.setStartTime(pullParser.nextText());} else if ("ArriveTime".equals(pullParser.getName())) {flight.setArriveTime(pullParser.nextText());} else if ("Mode".equals(pullParser.getName())) {flight.setMode(pullParser.nextText());} else if ("AirlineStop".equals(pullParser.getName())) {flight.setAirlineStop(pullParser.nextText());} else if ("Week".equals(pullParser.getName())) {flight.setWeek(pullParser.nextText());}break;case XmlPullParser.END_TAG:if ("AirlinesTime".equals(pullParser.getName())) {flightList.add(flight);flight = null;}break;}//用next方法处理下一个事件,不然就成死循环了event = pullParser.next();}//在Logcat打印出来,看结果for (int i = 0; i < flightList.size(); i++) {Log.v("AirlineCode", flightList.get(i).getAirlineCode());}return null;}private static String readSoap() throws Exception {InputStream inStream = FlightsService.class.getClassLoader().getResourceAsStream("flight.xml");byte[] data = StreamTool.read(inStream);return new String(data);}}</flight></flight>


源码我也放上来了,下载吧!

http://pan.baidu.com/share/link?shareid=197530&uk=1796216265



更多相关文章

  1. Android 数据存储之文件存储小记
  2. Android OpenGL ES学习笔记之实现OpenGL ES接口
  3. Android之使用ContentResolver对通信录中的数据进行简单操作
  4. android答题系统(二):实现主界面入口和查询数据
  5. Android跨进程通信传输大数据
  6. Android 音频 OpenSL ES PCM数据播放
  7. Android支付宝接口集成
  8. Android’s HTTP Clients(Android的HTTP客户端接口)
  9. 【Android】_MyContentProvider_外部访问接口

随机推荐

  1. Android电话拨打流程源码分析
  2. Android高性能编码实战:网络框架优化
  3. 更新Android(安卓)SDK到3.0版本时,遇到Fai
  4. Android客户端与Tomcat服务器通信实现登
  5. Android技术点总结
  6. android之字体阴影效果
  7. Android菜单详解(一)——理解Android中的Me
  8. 【Android(安卓)Developer】2.Android的
  9. Android(安卓)***测试学习手册(二)准备实验
  10. Android(安卓)核心分析(13) -----Android