天天看點

Android WebService

<b>Android WebService</b>

一、WebService

         按某種資料規範釋出的一種服務形式,為應用程式提供相應資料。

         如這個天氣預報Web服務:

二、簡單樣例

         搜尋Android WebService就可以找到很多了==,就簡單講講了。

         1)一樣使用的是KSOAP第三方類庫

/** 

 * 通路WebService 

 * 

 * @param methodName 

 *            WebService方法名 

 * @param propertyInfo 

 *            WebService方法參數 

 * @return SoapObject 傳回結果 

 */ 

private SoapObject visitWebService(String methodName, 

       PropertyInfo propertyInfo) throws Exception { 

   if (null != onWebServiceListener) { 

       onWebServiceListener.onStart(); 

   } 

   // 第1步:建立SoapObject對象,并指定WebService的命名空間和調用的方法名 

   SoapObject request = new SoapObject(Code.SERVICE_NAMESPACE, methodName); 

   // 第2步:設定WebService方法的參數 

   if (null != propertyInfo) { 

       request.addProperty(propertyInfo); 

   // 第3步:建立SoapSerializationEnvelope對象,并指定WebService版本 

   SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( 

          SoapEnvelope.VER11); 

   // 設定bodyOut屬性 

   envelope.bodyOut = request; 

   // 需要設定dotNet屬性,否則報錯 

   envelope.dotNet = true; 

   envelope.setOutputSoapObject(request); 

   envelope.encodingStyle = "UTF-8"; 

   // 第4步:建立HttpTransportSE對象并指定WSDL文檔的URL 

   HttpTransportSE ht = new HttpTransportSE(Code.SERVICE_URL); 

   try { 

       // 第5步:調用WebService 

       // ht.call(null, envelope); 

       // 需要設定SOAPAction的值,否則報錯 

       ht.call(Code.SERVICE_NAMESPACE + methodName, envelope); 

       // 第6步:使用getResponse方法獲得WebService方法的傳回結果 

       SoapObject soapObject = (SoapObject) envelope.getResponse(); 

       // SoapObject soapObject = (SoapObject) envelope.bodyIn; 

       Log.v("傳回結果", "=" + soapObject); 

       return soapObject; 

   } catch (Exception e) { 

       e.printStackTrace(); 

       Log.e("HttpTransportSE.call", "調用WebService出錯!"); 

       if (null != onWebServiceListener) { 

          onWebServiceListener.onError(); 

       } 

       throw e; 

         在org.join.weather.util内的WebService把Web服務提供的所有接口都裝在裡面了。

記得當時主要有個怎麼從多行多列的傳回結果中的獲得資訊的問題。開始用正則,後來直接下網頁進行XML解析,提高了很多效率。

         2)界面劃成了三塊,用的别人的畫廊元件(加了點東西,中文注釋的就是我加的了==)

         元件見包org.join.weather.widget下的FlingGallery。包内另一個MySpinner則是擴充的元件,用于省份和城市的關聯。

         順便提下左右滑屏也可以用Android擴充的android-support-v4.jar内的ViewPager。

         3)其他問題

         1、網絡剛開始隻當是Wifi(怨念==),後來才修改成了連接配接狀态,總之流程感覺怪怪的了。在org.join.weather.broadcast的WifiReceiver内還可以看到注釋的舊代碼。

         2、GPSUtil那塊,如果未開啟GPS時會跳轉到設定,但你不開啟回來再操作,會有個provider=null的異常未處理。另外,不确定能不能定到位了。還發現三個定位模式的代碼都有寫(沒印象了,囧)。

         4)截個圖,看看效果吧

三、後記

         源碼問題多多,還請各位大哥多多包涵了T^T。

<a href="http://down.51cto.com/data/2359793" target="_blank">附件:http://down.51cto.com/data/2359793</a>

     本文轉自winorlose2000 51CTO部落格,原文連結:http://blog.51cto.com/vaero/778118,如需轉載請自行聯系原作者

繼續閱讀