webService:基于SOAP协议的远程调用标准,通过webService可以将不用的操作系统平台,不同的计算机语言,不同的技术整合到一起。
调用webService需要导入jar包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar包,这个包在网上可以下载,至于导入的方法 ,右键项目,选择最后一项properties-->Java build path-->Libraies-->Add external Jars 选择相应的路径下的jar文件就OK了,然后记得在Order and Export 里面将选择的jar文件勾选上。
调用webService的步骤分为7个:
1. 实例化soapObject对象,指定Soap的命名空间(从相关文档中可以查看WSDL命名空间以及调用方法)
- View Code
- //命名空间
- private static final String serviceNameSpace="http://WebXml.com.cn/";
- //调用方法(获得支持的城市)
- private static final String getSupportCity="getSupportCity";
- //实例化SoapObject对象
- SoapObject request=new SoapObject(serviceNameSpace, getSupportCity);
2.假设方法有参数的话,添加调用的方法的参数
request.addProperties("参数名称","参数值");
要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。
3.设置SOAP请求信息(参数部分为SOAP版本号,与自己要调用的SOAP版本必须一致,也就是你导入到工程中的jar相对应的版本)
- //获得序列化的Envelope
- SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
- envelope.bodyOut=request; //确定发送对象
4.注册Enelope
(new MarshalBase64()).register(envelope);
5.构建传输对象,并指定WDSL文档中的URL
- //请求URL
- private static final String serviceURL="http://www.webxml.com.cn/webservices/weatherwebservice.asmx";
- //Android传输对象
- AndroidHttpTransport transport=new AndroidHttpTransport(serviceURL);
- transport.debug=true;
6.调用webService(其中参数为1:命名空间+方法名称,envelope对象);
- transport.call(serviceNameSpace+getWeatherbyCityName, envelope);
//5.访问WebService,第一个参数为命名空间 + 方法名,第二个参数为Envelope对象
7.解析返回数据:
- View Code
- if(envelope.getResponse()!=null){
- return parse(envelope.bodyIn.toString());
- }
- /**************
- * 解析XML
- * @param str
- * @return
- */
- private static List<String> parse(String str){
- String temp;
- List<String> list=new ArrayList<String>();
- if(str!=null && str.length()>0){
- int start=str.indexOf("string");
- int end=str.lastIndexOf(";");
- temp=str.substring(start, end-3);
- String []test=temp.split(";");
- for(int i=0;i<test.length;i++){
- if(i==0){
- temp=test[i].substring(7);
- }else{
- temp=test[i].substring(8);
- }
- int index=temp.indexOf(",");
- list.add(temp.substring(0, index));
- }
- }
- return list;
- }