安卓调用webservice的一种方式及需注意的问题

摘要  通过ksoap2-android调用webservice方法示例及注意事项。

    最近的项目中有需要通过安卓去调用webservice,在安卓中调用webservice的解决方案大都使用ksoap2-android工具,该工具使用方法在网上有很多,我也是用的这个工具。但是在使用过程中却发生了很多问题,我被这些问题给折磨了好几天,原因还是在于没理解ksoap2-android工具的使用方法。

    下面介绍ksoap2-android(2.5.8)的使用:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
private  static  final  String NAMESPACE =  "http://WebXml.com.cn/"
     // 由服务提供方提供参数,注意最后一个“/”不能少,否则服务端无法接收参数
     private  static  final  String URL =  "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx" ;
     // 服务所在的URL
     private  static  final  String METHOD_NAME =  "getMobileCodeInfo" ;
     // 要调用的方法名
     private  static  final  String SOAP_ACTION =  "http://WebXml.com.cn/getMobileCodeInfo" ;
     // SOAP_ACTION == NAMESPACE + METHOD_NAME;
 
 
     public  void  getLocation() {
         SoapObject soapObject =  new  SoapObject(NAMESPACE, METHOD_NAME);   
         // 添加要传递的两个参数
         soapObject.addProperty( "mobileCode" "13737373737" );
         soapObject.addProperty( "userId" "" );     
         // 设置服务端所使用的SOAP协议版本,可供选择的值有:VER10,VER11,VER12;分别代表SOAP1.0,SOAP1.1,SOAP1.2版本协议,此处使用SOAP1.1
         final  SoapSerializationEnvelope envelope =  new  SoapSerializationEnvelope(
                 SoapEnvelope.VER11);
         envelope.bodyOut = soapObject;
         envelope.dotNet =  true ;       // 为适配.net开发的服务作优化
         envelope.setOutputSoapObject(soapObject);
         HttpTransportSE httpTransportSE =  new  HttpTransportSE(URL);
         System.out.println( "××2××基本服务设置完毕,下面开始调用服务" );
         try 
         {
             httpTransportSE.call(SOAP_ACTION, envelope);
             runOnUiThread( new  Runnable() {
                 public  void  run() {
                     try  {
                         showToast(MainActivity. this , envelope.bodyIn.toString());
                     catch  (Exception ex) {
                         ex.printStackTrace();
                     }
                 }
             });
             System.out.println( "××3××调用webservice服务成功" );
        
         catch  (Exception e) 
         {
             e.printStackTrace();
             System.out.println( "××4××调用webservice服务失败" );
         }
 
         SoapObject object = (SoapObject) envelope.bodyIn;
         System.out.println( "××5××获得服务数据成功" );
         System.out.println( "××7××向主线程发送消息,显示号码归属地" );
         System.out.println( "××8××向主线程发送消息成功,getTelAddress函数执行完毕" );
     }

    网上大都是这个示例或者是查询天气预报的,不过查询天气预报的服务最近好像调用不到了。

    代码中所使用到的四个参数均需由服务提供方提供(当时我在开发安卓端功能的时候,问对方参数,对方说不知道。。。。艾玛。。当时心都碎了)。四个参数出错均有可能导致连接失败。

    我在完成了开发工作之后,测试发现可以调用服务,但服务端却接收不到参数,我明明已经传了的。。。后来找了半天才发现,NAMESPACE这个参数最后是以“/”结尾的,少了这个符号的话之后的参数是传不进去的。

    当然,在使用的时候还需要添加网络权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值