(1)指定webservice的名稱空間和被調用方法的名稱,例如:
soap object request = new soap object(http://service," getName ");
SoapObject類的第壹個參數表示WebService的名稱空間,可以在WSDL文檔中找到。第二個參數表示要調用的WebService方法的名稱。
(2)設置調用方法的參數值。如果沒有參數,可以省略。設置該方法參數值的代碼如下:
request . add property(" param 1 "," value ");
Request.addProperty("param2 "," value ");
需要註意的是,addProperty方法的1參數表示調用方法的參數名,但參數值不壹定與服務器的WebService類中的方法參數名壹致,只要設置參數的順序壹致即可。
(3)生成調用Webservice方法的SOAP請求信息。這些信息由SoapSerializationEnvelope對象描述,代碼為:
soap serialization envelope envelope = new
soap serializationenvelope(soap envelope。ver 11);
Envelope.bodyOut = request
創建SoapSerializationEnvelope對象時,需要通過SoapSerializationEnvelope類的構造函數設置SOAP協議的版本號。這個版本號需要根據服務器WebService的版本號來設置。在創建了SoapSerializationEnvelope對象之後,不要忘記設置SoapSerializationEnvelope類的bodyOut屬性,該屬性的值是第壹步中創建的SoapObject對象。
(4)創建壹個HttpTransportsSE對象。WebService的WSDL文檔的URL可以通過HttpTransportsSE類的構造函數來指定:
http transportse ht = new http transportse(" search news service?wsdl”);
(5)使用call方法調用WebService方法,代碼:
ht.call(空,信封);
Call方法的第壹個參數壹般為null,第二個參數是在步驟3中創建的SoapSerializationEnvelope對象。
(6)使用getResponse方法獲取WebService方法的返回結果,代碼:
soap object soap object =(soap object)envelope . getresponse();
下面是壹個實現天氣查看功能的簡單例子:
復制代碼
publicclass WebService擴展活動{
privatestaticfinal字符串命名空間= " ";
//web服務地址
private static String URL = " weather web service . asmx ";
privatesticcfinal String METHOD _ NAME = " getWeatherbyCityName ";
private static String SOAP _ ACTION = " getWeatherbyCityName ";
private String weatherToday
私人按鈕okButton
私有SoapObject詳細信息;
@覆蓋
public void onCreate(Bundle saved instancestate){
super . oncreate(savedInstanceState);
setContentView(r . layout . main);
ok Button =(Button)findViewById(r . id . ok);
okButton.setOnClickListener(新按鈕。OnClickListener() {
publicvoid onClick(視圖v) {
showWeather();
}
});
}
privatevoid showWeather() {
弦城= "武漢";
getWeather(城市);
}
@SuppressWarnings("deprecation ")
public void getWeather(String city name){
嘗試{
system . out . println(" RPC-");
SoapObject rpc =new SoapObject(命名空間,METHOD _ NAME);
system . out . println(" RPC "+RPC);
system . out . println(" city name is "+city name);
rpc.addProperty("theCityName ",城市名);
AndroidHttpTransport ht = new AndroidHttpTransport(URL);
ht.debug = true
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
肥皂信封。ver 11);
envelope.bodyOut = rpc
envelope.dotNet = true
envelope . setoutputsoapobject(RPC);
ht.call(SOAP_ACTION,envelope);
soap object result =(soap object)envelope . body in;
detail = (SoapObject)結果
。getProperty(" getWeatherbyCityNameResult ");
system . out . println(" result "+result);
System.out.println("細節"+細節);
Toast.makeText(WebService.this,detail.toString(),
吐司。長度_長)。show();
parseWeather(細節);
返回;
} catch(異常e) {
e . printstacktrace();
}
}
private void parse weather(soap object詳細信息)
引發UnsupportedEncodingException {
string date = detail . getproperty(6)。toString();
weather Today = " Today:"+date . split(" "[0]);
今日天氣=今日天氣+" \ n天氣:"+date . split(" "[1];
今日天氣=今日天氣+" \ n溫度:"
+ detail.getProperty(5)。toString();
今日天氣=今日天氣+" \ n風力:"
+ detail.getProperty(7)。toString()+" \ n ";
system . out . println(" weather today is "+weather today);
Toast.makeText(WebService.this,weatherToday,
吐司。長度_長)。show();
}
}