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