android 客户端数据传递之一:Web Service 代码

来源:互联网 发布:卡夫亨氏的管培生 知乎 编辑:程序博客网 时间:2024/06/03 15:30

http://sizeed.blog.163.com/blog/static/965254512011102143952442/


此段代码是我这个项目调用Web Service的核心代码;

  使用ksoap2调用Web Service步骤如下:

  1、创建HttpTransportSE对象(传送带),该对象用于调用Web Service。

  2、创建SoapSerializationEnvelope对象(装SOAP信息的信封)。

  3、创建SoapObject对象,创建该对象时需要传入所需要调用的WebService的命名空间。

  4、如果有参数需要传递给Web Service服务器,调用SoapObject对象的addProperty(String key, Object value)方法。

  5、调用前面创建的SoapSerializationEnvelope对象的setOutputSoapObject()方法,或者直接对bodyOut属性赋值,将前面创建的SoapObject对象设为SoapSerializationEnvelope的传出的SOPA。

  6、调用HttpTransportSE对象的call()方法,并以SopaSerializationEnvlope作为参数调用远程Web Service。

  7、调用完成后,访问SoapSerializationEnvelope对象的bodyIn,该属性会返回一个SopaObjec对象,该对象代表了一个Web Service服务端返回的数据,解析该SoapObject就可以得到你想要的数据了。

  可以这样理解:

      首先创建的HttpTransportSE(以下简写trans)对象可以看做它为一个传送带,SoapSerializationEnvelope对象(以下简写envelope)为一个邮递员,SoapObject(以下简写so)为一个包裹:

  so.addProperty(WordKey,word):将“询问”的信息装入包裹。

  envlope.bodyOut = so:邮递员拿上Out包裹,待送。

  ht.call(..., envlope)方法:邮递员拿着包裹,跳上传送带去访问服务器并交换数据。

  SoapObject so = (SoapObject)envlope.bodyIn:从邮递员身上拿出和服务器交换后的包裹。此包裹与上面的so不是同一个对象

  so.getProperty(...):从包裹中取出“回答”信息。

  以上就是使用ksoap2-android调用Web Service的方式。

 

代码:

  SoapObject rpc = new SoapObject(NAME_SPACE, METHOD_NAME);//设置需调用WebService接口
  
  //设置参数
  rpc.addProperty("a", 109);
  rpc.addProperty("b", 3);
  
  // 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
  SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
  
  envelope.bodyOut = rpc;
  //设置是否调用的是dotNet开发的WebService
  //envelope.dotNet = true;//等价于envelope.bodyOut = rpc;
  
  envelope.setOutputSoapObject(rpc);
  HttpTransportSE transport = new HttpTransportSE(URL);
  
  try {
   //调用WebService
   transport.call(SOAP_ACTION, envelope);
  } catch (Exception e) {
   e.printStackTrace();
  }
  
  
  //获取返回的数据
  SoapObject object = (SoapObject) envelope.bodyIn;
  //获取返回的结果
  String result = object.getProperty("return")+"";
  return result;


原创粉丝点击