Android中使用Android Ksoap2呼叫WebService

傑瑞教育發表於2015-05-11

一、WebService介紹

WebService是基於SOAP協議可實現web伺服器與web伺服器之間的通訊,因採用SOAP協議傳送XML資料具有平臺無關性,也是成為解決異構平臺之間通訊的重要解決方案,比如Java平臺與.net平臺之間。因此在web應用中有著舉足輕重的作用,很多機構、組織都在各自平臺上對外發布了WebService(例如:天氣預報、航班資訊、股市行情等等),這樣任何平臺和客戶都可以享受到這些服務,當然有些是要付費的。

二、Android ksoap2元件

對於Android端呼叫WebService,有兩種方式,一種自己編寫程式碼主要通過URL獲得 HttpURLConnection的方式建立與webservice的連線,然後進行I/O讀寫傳送和獲得資料,並對獲得資料進行XML解析,比較麻煩。另一種就是使用第三方元件,比較常用的就是ksoap2-android。

ksoap2-android這個開源元件針對Android平臺提供了一個輕量級和高效的SOAP類庫,可方便實現Android端與WebService之間的通訊

1、環境搭建

ksoap2-android專案的地址:http://code.google.com/p/ksoap2-android/ 大家可以下載最新版本jar,然後將jar加入到專案中即可。

我這裡使用是ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar

2、Ksoap2 使用的主要步驟

1)web服務引數準備

// webservice服務地址

String url= “http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx”;

//web服務的名稱空間

String namespace=” http://WebXml.com.cn/”;

//請求服務的方法名稱

String methodName=”getMobileCodeInfo”;

//soap請求地址

String soapActionAddress = "http://WebXml.com.cn/getMobileCodeInfo";

2)建立HttpTransportSE,該元件可傳送請求

HttpTransportSE transport = new HttpTransportSE(url);

3)建立SoapObject,新增要傳送的資料(資訊載體)

SoapObject soapObject = new SoapObject(namespace,methodName);

soapObject.addProperty(name,value);//新增資料

…

4)建立SoapSerializationEnvelope物件,指定xml版本,以及request中body

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.bodyOut = soapObject;

envelope.setOutputSoapObject(soapObject);

5)傳送請求,呼叫webserivce中的方法

httpTransportSE.call(soapActionAddress, envelope);//服務傳回的資訊,會放在envelope的bodyIn屬性中

6) 獲取服務傳回的資料

SoapObject object = (SoapObject) envelope.bodyIn;

三、實現案例——通過呼叫webservice查詢手機號碼的歸屬地

執行效果如下:

在Android中使用Android Ksoap2呼叫WebService

完整程式碼實現:

public class MainActivity extends Activity {
    ///手機歸屬地Webservice的引數資訊
    private static final String nameSpaceAddress = "http://WebXml.com.cn/";
private static final String urlAddress
 = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx";
    private static final String methodNameAddress = "getMobileCodeInfo";
    private static final String soapActionAddress = "http://WebXml.com.cn/getMobileCodeInfo";
    private TextView telAddress = null;
    private EditText tel = null;
    private Button btnAddress = null;
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnAddress = (Button) this.findViewById(R.id.btnSearchAddress);
        telAddress = (TextView) this.findViewById(R.id.telAddress);
        tel = (EditText) this.findViewById(R.id.telNo);
        btnAddress.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    public void run() {
                        getTelAddress();
                    }
                }).start();

            }
        });
/**
* 請求WebService並獲得返回的手機號碼歸屬地資訊
*/
public void getTelAddress() {
        SoapObject soapObject = new 
SoapObject(nameSpaceAddress, methodNameAddress);//建立SOAP物件
        //設定屬性,這些屬性值通過SOAP協議傳送給伺服器
        soapObject.addProperty("mobileCode", tel.getText().toString());//要查詢的電話號碼
        soapObject.addProperty("userId", "");        
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        envelope.bodyOut = soapObject;
        envelope.dotNet = true;        
        envelope.setOutputSoapObject(soapObject);
        HttpTransportSE httpTransportSE = new HttpTransportSE(urlAddress);
        try {
            //呼叫服務
            httpTransportSE.call(soapActionAddress, envelope);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //獲取服務傳回的資料,手機歸屬地資訊
        SoapObject object = (SoapObject) envelope.bodyIn;
        txtAddress = object.getProperty(0).toString();
        //向主執行緒傳送訊息成功,getTelAddress函式執行完畢
        handlerAddress.sendEmptyMessage(0);

    }
    Handler handlerAddress = new Handler() {
        public void handleMessage(Message msg) {
            telAddress.setText(txtAddress);
            Toast.makeText(MainActivity.this, 
"獲取號碼歸屬地成功"+txtAddress, Toast.LENGTH_LONG).show();
        }
    };
}

四、附:常見的WebService服務URL

手機歸屬地服務

http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx

天氣預報Web服務,資料來源於中國氣象局

http://www.webxml.com.cn/WebServices/WeatherWebService.asmx

IP地址來:

http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx

中文 <-> 英文雙向翻譯 WEB 服務:

http://www.webxml.com.cn/WebServices/TranslatorWebService.asmx

火車時刻表

http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx

航班查詢服務

http://webservice.webxml.com.cn/webservices/DomesticAirline.asmx

中國股票行情資料 WEB 服務

http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx

中國電視節目預告

http://www.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx

相關文章