WebService是基于SOAP协议可实现web服务器与web服务器之间的通信,因采用SOAP协议传送XML数据具有平台无关性,也是成为解决异构平台之间通信的重要解决方案,比如Java平台与.net平台之间。因此在web应用中有着举足轻重的作用,很多机构、组织都在各自平台上对外发布了WebService(例如:天气预报、航班信息、股市行情等等),这样任何平台和客户都可以享受到这些服务,当然有些是要付费的。
对于Android端调用WebService,有两种方式,一种自己编写代码主要通过URL获得 HttpUrlConnection的方式建立与webservice的连接,然后进行I/O读写传送和获得数据,并对获得数据进行XML解析,比较麻烦。另一种就是使用第三方组件,比较常用的就是ksoap2-android。
ksoap2-android这个开源组件针对Android平台提供了一个轻量级和高效的SOAP类库,可方便实现Android端与WebService之间的通信
ksoap2-android项目的地址:http://code.google.com/p/ksoap2-android/ 大家可以下载最新版本jar,然后将jar加入到项目中即可。
我这里使用是ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar
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;
执行效果如下:
完整代码实现:
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(); } }; }
手机归属地服务
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