1. 程式人生 > >Android學習之呼叫Web Service

Android學習之呼叫Web Service

對於Android呼叫Web Service服務,首先要了解什麼事Web Service?

根據W3C定義,Web Service(即WEB服務)是一種用於支援網路間不同機器互操作的軟體系統。它是一種自包含,自描述和模組化的應用程式。它可以在網路中被描述,被呼叫和釋出。可以將它看作是基於網路的,分散式的模組元件。簡單來說呢,就是Web Service是一套針對網路的服務體系,通過這套體系可以使得不同機器在網路間相互操作,抽象的說這是一種服務,具體的說這是一套軟體系統。

那麼既然要支援不同機器在網路間的相互操作,自然需要支援一套網路協議,如:HTTP,SOAP,UDDI,WSDL等(都支持者幾個協議)。這些協議對作業系統,程式語言等沒有要求。

由於它是基於HTTP協議的,所以它可以穿過防火牆,不需要更改防火牆的設定。從而避免了特殊埠通訊時無法穿越防火牆的缺點。

簡而言之,Web Service可以讓我們像呼叫本地方法一樣呼叫遠端伺服器上的服務。並且我們不需要關係遠端伺服器上的服務是用什麼語言編寫的,是在什麼平臺下的。

由於支援眾多協議,這裡主要講述SOAP協議。這是一種輕量級的,簡單的,基於XML的協議。是一種簡單的交換資訊的協議。經常使用的版本有SOAP1.1和SOAP1.2。

其次離不開的是WSDL,這是一種描述性的XML文件。描述的Web Service相關的介面,引數等相關資訊。簡單說就是一種針對Web Service的幫助文件。

瞭解了Web Service和SOAP以及WSDL和它的關係,那麼就回歸主題,如何在Android開發中呼叫Web Service服務以便連線遠端伺服器呢?

Android要呼叫Web Service需要呼叫第三方庫,Ksoap2。這是一個SOAP Web Service的客戶端開發包。在Android工程中需要匯入該開發包。因為SDK不包含該開發包。在Android中該包叫做ksoap-Android。下載地址http://code.google.com/p/ksoap2-android/。(最好翻牆下載)

下載包後就需要將該包放在Android工程的libs資料夾下。然後匯入包基本完成。

使用Web Service時主要分為以下幾步:

①、定義名稱空間。 String namespace=" ";

②、定義呼叫方法名稱。String methodname=" ";

③、定義EndPoint部分。該部分通常是將WSDL地址末尾?wsdl去掉後剩餘的部分。

④、定義SOAP action部分。該部分通常是名稱空間+呼叫的方法名稱 的組合。

初步準備是這些,然後就是通過soap物件來使用。

1、建立SoapObject物件。 SoapObject ws=new SoapObject(namespace,methodname);

2、給需要呼叫的web service介面傳入引數。ws.addProperty("引數名",value);

3、生成SOAP的呼叫請求資訊,並指定SOAP版本。 SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER10)//假設版本是1.0。

4、設定是否呼叫dotNet開發的Web Service。envelope.dotNet=true;//呼叫

5、發出Web Service連結請求。 envelope.setOutputSoapObject(ws); //自己理解的意思,但這句是必須的。

6、建立HttpTransportSE transport=new HttpTransportSE(endPoint);

7、呼叫Web Service服務。transport.call(soapAction,envelope);

8、獲取返回的資料。 SoapObject data=(SoapObject)envelope.bodyIn;

9、獲取返回的結果。SoapObject result=data.getProperty(0).toString();

10、將Web Service返回的結果顯示在TextView中去。 resultText.getText(result);

以上是對Web Service的使用的簡介。由於本人是剛開始接觸,所以簡單的介紹這些基本的,在之後的使用中如遇到需要注意的地方會繼續補充。

這裡最後要注意,要在AndroidManifest.xml檔案中新增網路許可權。 <user-permission androdi:name="android.permission.INTERNET"/>。