<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,如需轉載請自行聯系原作者