當前位置:成語大全網 - 漢語詞典 - Android如何調用webservice?

Android如何調用webservice?

調用webservice的具體方法如下:

(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();

}

}