基於Ksoap2調用Web service服務


  最近做一個項目,中間有用到Android端使用Asp.Net寫的Webservice。用了比較常用的Ksoap2類庫。可以通過下面地址下載

 http://code.google.com/p/ksoap2-android/downloads/list?can=1&q=&colspec=Filename+Summary+Uploaded+Size+DownloadCount

在Eclipse工程中引用這個jar包即可。

  下面使用KSOAP2的步驟來編寫調用WebService的客戶端程序,代碼如下:

 1 //new 一個連接Webservice的類,這個類下面給出。webserviceUrl為//Webservice的連接地址,nameSpace為命名空間
 2 private ConWebService conWebService = new ConWebService(
 3             webserviceUrl ,nameSpace);
 4 
 5 //給出一個中間層調用的方法,返還String數組
 6 public ArrayList<String> getDate(String key)
 7     {
 8         ArrayList<String> arrayList = new ArrayList<String>();
 9                 //添加參數,這個參數可以是多個循環添加即可
10                 //11                 //PropertyInfo pro[] = new PropertyInfo[2];
12         //for (int i = 0; i < 2; i++)
13         //{
14             //pro[i] = new PropertyInfo();
15         //}
16         //pro[0].setName("sqlName");
17         //pro[0].setValue(sqlName);
18         //pro[1].setName("date");
19         //pro[1].setValue(date);
20     PropertyInfo pro = new PropertyInfo();
21     pro.setName("key");
22         pro.setValue(key);
23     arrayList =conWebService.getSoapData("getData", pro);
24         return arrayList;
25     }

 

下面的這個ConWebservice類是主要實現獲取數據的功能了。給出關鍵代碼

 1 public ArrayList<String> getSoapData(String methodName, PropertyInfo... pros)
 2     {
 3         ArrayList<String> resultList = new ArrayList<String>();
 4         
 5         //1.創建SoapObject對象,並指定WebService的命名空間和調用的方法名 
 6         SoapObject soapObject = new SoapObject(NameSpace, methodName);
 7         
 8         //2.設置SoapAction
 9         soapAction = NameSpace + methodName;
10         
11         //2.設置WebService方法的參數(以不定參數為例) 
12         if (pros.length > 0)
13         {
14             for (PropertyInfo pro : pros)
15             {
16                 soapObject.addProperty(pro);
17             }
18         }
19         //創建SoapSerializationEnvelope對象,生成調用WebService方法的SOAP請求信息,並指定WebService Soap協議的版本 
20         SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER12 );
21 
22         
23         //設置bodyOut屬性    (SoapEnvelope類中,設置發送的數據和接收數據,分別使用方法:bodyOut,bodyIn)
24         envelope.bodyOut = soapObject;
25 
26         // 設置是否調用的是DotNet開發的WebService
27         envelope.dotNet = true;
28 
29         //創建HttpTransportSE對象,並指定WSDL文檔的URL 
30         HttpTransportSE transport = new HttpTransportSE(WebserviceUrl);
31         try
32         {
33             transport.call(soapAction, envelope);
34             if (envelope.getResponse() != null)
35             {
36                 // 獲取服務器返回的SOAP消息————接收數據
37                 SoapObject result = (SoapObject) envelope.bodyIn;
38                 
39                 //getProperty這個方法相當取中間參數名為soapObject.getName() + "Result"的value,當然也可以按索引取值
40                 SoapObject detail = (SoapObject) result.getProperty(soapObject.getName() + "Result");
41                 
42                 // 解析服務器的SOAP消息
43                 int count = detail.getPropertyCount();
44                 for (int i = 0; i < count; i++)
45                 {
46                     resultList.add(detail.getProperty(i).toString());
47                 }
48 
49             }50         }    

基本上每行都有注釋,就不多廢話了。

當然,我這個Webservice傳送過來的是一個String。當然,如果對不限XML復雜的話,也可以試試解析解析XML。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM