现在的位置: 首页 > 综合 > 正文

Android开发系列之阿堂教程:使用Web Service进行网络编程

2018年03月31日 ⁄ 综合 ⁄ 共 2623字 ⁄ 字号 评论关闭


们知道,Android应用通常是运行在手机平台上,手机系统的硬件资源是有限的,不管是存储能力还是计算能力都有限,在Android系统上开发,运行一些单用户,小型应用是可能的,但对于需要进行大量的数据处理,复杂计算的应用,还是只能部署在远程服务器上,Android应用将只是充当这些应用的客户端。

 

       为了让Android应用与远程服务器之间进行交互,可以借助于Java的RMI技术,但这要求远程服务器必须采用Java实现;也要以采用CORBA技术,但这种技术显得于过复杂;除此之外,WebService是一种不错的选择。
        关于WebServcie在网上有很多的介绍,在阿堂的技术博客上也有一些文章的介绍,这里我就不多说了,不懂的网友可去网上查阅资料。
        下面,阿堂主要介绍Android应用调用WebService的步骤,并且后面附上一Demo的主要代码文件。
        Google为Android平台开发WebService客户端提供了ksoap2-android项目,但这个项目并未直接集成在Android平台中,还需要开发人员下载。
下载地址: http://code.google.com/p/ksoap2-android/站点,该站点有介绍下载ksoap2-android项目的方法。下载过程,阿堂就不再说明了。

使用ksoap2-android调用webservice操作的步骤如下
(1)创建HttpTransportSE对象,该对象用于调用Webservice操作。
(2)创建SoapSerializationEnvelope对象。(使用SoapSerializationEnvelope对象的bodyOut属性传给服务器,服务器响应生成的SOAP消息也通过SoapSerializationEnvelope对象的bodyin属性来获取)
(3)创建SoapObject对象,创建该对象时需要传入所要调用WebService的命名空间。
(4)如果用参数需要传给WebServcie服务端,调用SoapObject对象的addProperty(String name,Objectvalue)方法来设置参数,该方法的name参数指定参数名;value参数指定参数值。
(5)调用SoapSerializationEnvelope的setOutputSoapObject()方法,或者直接对bodyOut属性赋值,将前两步创建的SoapObject对象设为SoapSerializationEnvelpe的传出SOAP消息体。
(6)调用对象的call()方法,并以SoapSerializationEnvelpe作为参数调用远程WebServcie。
(7)调用完成后,访问SoapSerializationEnvelope对象的bodyIn属性,该属性返回一个SoapObjectd对象,该对象就代表了WebService的返回消息。解析该SoapObject对象,即可获取调用Web Service的返回值。

下面,请随要阿堂看一个实例:调用WebService实现天气预报
        在开发天气预报的Android应用之前,首先找到一个可以对外提供天气预报的WebService,通过搜索, 发现http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx站点,可以对外提供天气预报的WebService,因此程序将会调用该站点的Web
Service来实现天气预报。

请看阿堂操作时的截图效果
Android开发系列之阿堂教程:使用Web <wbr>Service进行网络编程

Android开发系列之阿堂教程:使用Web <wbr>Service进行网络编程

请看三个主要文件(请网友们针对下面的代码,好好体会使用ksoap2-android调用webservice操作的步骤)
public classWebServiceUtil
{
    // 定义WebService的命名空间
    static finalString SERVICE_NS = "http://WebXml.com.cn/";
    // 定义WebService提供服务的URL
    static finalString SERVICE_URL =
       "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx";

    // 调用远程WebService获取省份列表
    publicstatic List getProvinceList()
    {
       //调用的方法
       StringmethodName = "getRegionProvince";
       //创建HttpTransportSE传输对象
      HttpTransportSE ht = new HttpTransportSE(SERVICE_URL);
       ht.debug =true;
       //使用SOAP1.1协议创建Envelop对象
      SoapSerializationEnvelope envelope = newSoapSerializationEnvelope(
         SoapEnvelope.VER11);
       //实例化SoapObject对象
       SoapObjectsoapObject = new SoapObject(SERVICE_NS, methodName);
      envelope.bodyOut = soapObject;
       //设置与.Net提供的Web Service保持较好的兼容性
      envelope.dotNet = true;
       try
       {
          // 调用WebService
         ht.call(SERVICE_NS + methodName, envelope);
          if(envelope.getResponse() != null)
          {
             //获取服务器响应返回的SOAP消息
             SoapObjectresult = (SoapObject) envelope.bodyIn;
             SoapObjectdetail = (SoapObject) result.getProperty(methodName
        

抱歉!评论已关闭.