Android中的WebService

目录

  • WebService简介—-来自网络资料
  • 在java中调用WebService
  • Android中调用Service

WebService简介—-来自网络资料

  • Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。
  • XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础。

  • Soap:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。

  • WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。

  • UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。

WebService的调用原理—-来自网络资料

  • Web服务有两层含义:1、是指封装成单个实体并发布到网络上的功能集合体;2、是指功能集合体被调用后所提供的服务。简单地讲,Web服务是一个URL资源,客户端可以通过编程方式请求得到它的服务,而不需要知道所请求的服务是怎样实现的,这一点与传统的分布式组件对象模型不同。

  • Web服务的体系结构是基于Web服务提供者、Web服务请求者、Web服务中介者三个角色和发布、发现、绑定三个动作构建的。

  • 简单地说,Web服务提供者就是Web服务的拥有者,它耐心等待为其他服务和用户提供自己已有的功能;
  • Web服务请求者就是Web服务功能的使用者,它利用SOAP消息向Web服务提供者发送请求以获得服务;
  • Web服务中介者的作用是把一个Web服务请求者与合适的Web服务提供者联系在一起,它充当管理者的角色,一般是UDDI。
  • 这三个角色是根据逻辑关系划分的,在实际应用中,角色之间很可能有交叉:一个Web服务既可以是Web服务提供者,也可以是Web服务请求者,或者二者兼而有之。
  • 显示了Web服务角色之间的关系:其中,“发布”是为了让用户或其他服务知道某个Web服务的存在和相关信息;“查找(发现)”是为了找到合适的Web服务;
  • “绑定”则是在提供者与请求者之间建立某种联系。
    Android中的WebService新解_第1张图片

WebService实现一个完整的Web服务包括以下步骤:—-来自网络资料

  • Web服务提供者设计实现Web服务,并将调试正确后的Web服务通过Web服务中介者发布,并在UDDI注册中心注册; (发布)

  • Web服务请求者向Web服务中介者请求特定的服务,中介者根据请求查询UDDI注册中心,为请求者寻找满足请求的服务; (发现)

  • Web服务中介者向Web服务请求者返回满足条件的Web服务描述信息,该描述信息用WSDL写成,各种支持Web服务的机器都能阅读;(发现)

  • 利用从Web服务中介者返回的描述信息生成相应的SOAP消息,发送给Web服务提供者,以实现Web服务的调用;(绑定)

  • Web服务提供者按SOAP消息执行相应的Web服务,并将服务结果返回给Web服务请求者。(绑定)

Java中如何调用WebService

  • 这里介绍一种方式:
    1. 在控制台上敲如下指令,将对应的代码下载到本地,并且包名是 com.xxx.xxx
  • wsimport -keep -p com.xxx.xxx http://web.36wu.com////?wsdL
    1. 找到相应的磁盘,将代码复制到对应的程序src下
    1. 想使用哪个,就调用对应的Service
  • 代码示例如下:
  • *
package com.zhiyuan.demo;import com.zhiyuan.com.ResultOfTodayWeather;import com.zhiyuan.com.WeatherService;import com.zhiyuan.com.WeatherServiceSoap;/** * 在java中使用WebService获取天气信息, * 本Demo是使用的是http://www.36wu.com/网站下的WebService * @author zhiyuan0932 * 这个key需要自己申请,并且有效期是一天(坑爹啊) */ ``` import com.zhiyuan.com.ResultOfTodayWeather;import com.zhiyuan.com.WeatherService;import com.zhiyuan.com.WeatherServiceSoap;/** * 在java中使用WebService获取天气信息, * 本Demo是使用的是http://www.36wu.com/网站下的WebService * @author zhiyuan0932 * 这个key需要自己申请,并且有效期是一天(坑爹啊) */public class WeatherDemo {    public static void main(String[] args) {        // 首先获取对应的服务        WeatherService weatherService = new WeatherService();        // 然后获取该服务协议        WeatherServiceSoap weatherServiceSoap = weatherService                .getWeatherServiceSoap();        //根据服务协议去获取对应的信息结果,这        ResultOfTodayWeather weather = weatherServiceSoap.getWeather("北京",                "d5d68f34ee5644aea7bd727b751e24ed");        //根据信息结果,获取Data,进而获取data下中对应的字段,如获取天气预报中的湿度信息        System.out.println(weather.getData().getHumidity());    }}

Android中调用WebService内容

  • 在Android中由于javax.xml.bind包无法引用,所以不能按照java中调用WebService来使用,并且现在的WebService网站,支持Android端调用的不多,这位Android开发带来了很大麻烦。目前楼主暂时知道这个网站
  • http://www.36wu.com/还支持安卓端,之前比较常用的网址
  • http://www.webxml.com.cn/zh_cn/index.aspx,在官方声明不再支持Android版本。
    这对Android开发带来了很大不便,本文针对http://www.36wu.com做个Demo

  • 下载ksoap2 android当前的最新版本为2.5.4,名为ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar,它的下载地址是:http://code.google.com/p/ksoap2-android/,进入页面后,点击“Downloads”标签页

        // 设置命名空间,及访问的方法名        SoapObject soapObject = new SoapObject(namespace, name);        // 携带要查询的数据        soapObject.addProperty("district", "北京");        // 添加自己在http://www.36wu.com/申请的key//      soapObject.addProperty("authkey", "d5d68f34ee5644aea7bd727b751e24ed");        // 得到HttpTransportSE对象,设置访问url        HttpTransportSE se = new HttpTransportSE(URL);        // 北京        // 得到serializationEnvelope對象,设置Soap版本号        SoapSerializationEnvelope serializationEnvelope = new SoapSerializationEnvelope(                SoapEnvelope.VER11);        // 设置发送给服务器的信息        serializationEnvelope.bodyOut = soapObject;        // 设置支付.NET语言        serializationEnvelope.dotNet = true;        try {            // 发送请求            se.call(SOAPAction, serializationEnvelope);            // 得到服务器返回的数据            SoapObject soapObject_in = (SoapObject) serializationEnvelope.bodyIn;            System.out.println("============" + soapObject_in.toString());            // 得到GetWeatherResult字段下包含的信息            SoapObject getWeatherResult = (SoapObject) soapObject_in                    .getProperty("GetWeatherResult");            SoapObject data = (SoapObject) getWeatherResult.getProperty("data");            System.out.println(data.toString());        } catch (IOException e) {            e.printStackTrace();        } catch (XmlPullParserException e) {            e.printStackTrace();        }

更多相关文章

  1. Android 手机制式和网络类型 GSM/EDGE/CDMA/WCDMA 判断sim卡类型
  2. Android实习生 —— 网络请求及数据解析
  3. Android Twitter第三方登录&获取用户信息
  4. Android 网络通信框架Volley完全解析(一)
  5. android调试信息
  6. Android compileSdkVersion 23 导致apache网络库HttpClient过期
  7. Android封装Retrofit2+OkHttp3+RxJava网络请求
  8. Android编程 获取网络连接状态 及调用网络配置界面

随机推荐

  1. 帮助android程序实现动画特效--Lemon动画
  2. ListView中getView的原理+如何在ListView
  3. [置顶] 开发第一个Android设备驱动程序
  4. 结合Android学设计模式--开篇
  5. Android(安卓)Rild模块源码分析
  6. Android中Handler作用
  7. android 字符串绘制示例
  8. EditText输入框的长度调整
  9. 亚马逊 CEO 称 Kindle Fire 是一个终端到
  10. Android(安卓)使用DexClassLoader来运行