关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » 安卓开发 »Android中使用Android Ksoap2调用WebService

    Android中使用Android Ksoap2调用WebService

    2015-05-11 00:00:00 出处:easydone
    分享

    一、WebService介绍

    WebService是基于SOAP协议可实现web服务器与web服务器之间的通信,因采用SOAP协议传送XML数据具有平台无关性,也是成为解决异构平台之间通信的重要解决方案,比如Java平台与.net平台之间。因此在web应用中有着举足轻重的作用,很多机构、组织都在各自平台上对外发布了WebService(例如:天气预报、航班信息、股市行情等等),这样任何平台和客户都可以享受到这些服务,当然有些是要付费的。

    二、Android ksoap2组件

    对于Android端调用WebService,有两种方式,一种自己编写代码主要通过URL获得 HttpUrlConnection的方式建立与webservice的连接,然后进行I/O读写传送和获得数据,并对获得数据进行XML解析,比较麻烦。另一种就是使用第三方组件,比较常用的就是ksoap2-android。

    ksoap2-android这个开源组件针对Android平台提供了一个轻量级和高效的SOAP类库,可方便实现Android端与WebService之间的通信

    1、环境搭建

    ksoap2-android项目的地址:http://code.google.com/p/ksoap2-android/ 大家可以下载最新版本jar,然后将jar加入到项目中即可。

    我这里使用是ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar

    2、Ksoap2 使用的主要步骤

    1)web服务参数准备

    // webservice服务地址
    
    String url= “http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx”;
    
    //web服务的命名空间
    
    String namespace=” http://WebXml.com.cn/”;
    
    //请求服务的方法名称
    
    String methodName=”getMobileCodeInfo”;
    
    //soap请求地址
    
    String soapActionAddress = "http://WebXml.com.cn/getMobileCodeInfo";

    2)创建HttpTransportSE,该组件可发送请求

    HttpTransportSE transport = new HttpTransportSE(url);

    3)创建SoapObject,添加要传送的数据(信息载体)

    SoapObject soapObject = new SoapObject(namespace,methodName);
    
    soapObject.addProperty(name,value);//添加数据
    
    …

    4)创建SoapSerializationEnvelope对象,指定xml版本,以及request中body

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    
    envelope.bodyOut = soapObject;
    
    envelope.setOutputSoapObject(soapObject);

    5)发送请求,调用webserivce中的方法

    httpTransportSE.call(soapActionAddress, envelope);//服务传回的信息,会放在envelope的bodyIn属性中

    6) 获取服务传回的数据

    SoapObject object = (SoapObject) envelope.bodyIn;

    三、实现案例——通过调用webservice查询手机号码的归属地

    执行效果如下:

    在Android中使用Android Ksoap2调用WebService

    完整代码实现:

    public class MainActivity extends Activity {
        ///手机归属地Webservice的参数信息
        private static final String nameSpaceAddress = "http://WebXml.com.cn/";
    private static final String urlAddress
     = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx";
        private static final String methodNameAddress = "getMobileCodeInfo";
        private static final String soapActionAddress = "http://WebXml.com.cn/getMobileCodeInfo";
        private TextView telAddress = null;
        private EditText tel = null;
        private Button btnAddress = null;
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            btnAddress = (Button) this.findViewById(R.id.btnSearchAddress);
            telAddress = (TextView) this.findViewById(R.id.telAddress);
            tel = (EditText) this.findViewById(R.id.telNo);
            btnAddress.setOnClickListener(new Button.OnClickListener() {
                @Override
                public void onClick(View v) {
                    new Thread(new Runnable() {
                        public void run() {
                            getTelAddress();
                        }
                    }).start();
    
                }
            });
    /**
    * 请求WebService并获得返回的手机号码归属地信息
    */
    public void getTelAddress() {
            SoapObject soapObject = new 
    SoapObject(nameSpaceAddress, methodNameAddress);//创建SOAP对象
            //设置属性,这些属性值通过SOAP协议传送给服务器
            soapObject.addProperty("mobileCode", tel.getText().toString());//要查询的电话号码
            soapObject.addProperty("userId", "");        
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
            envelope.bodyOut = soapObject;
            envelope.dotNet = true;        
            envelope.setOutputSoapObject(soapObject);
            HttpTransportSE httpTransportSE = new HttpTransportSE(urlAddress);
            try {
                //调用服务
                httpTransportSE.call(soapActionAddress, envelope);
            } catch (Exception e) {
                e.printStackTrace();
            }
            //获取服务传回的数据,手机归属地信息
            SoapObject object = (SoapObject) envelope.bodyIn;
            txtAddress = object.getProperty(0).toString();
            //向主线程发送消息成功,getTelAddress函数执行完毕
            handlerAddress.sendEmptyMessage(0);
    
        }
        Handler handlerAddress = new Handler() {
            public void handleMessage(Message msg) {
                telAddress.setText(txtAddress);
                Toast.makeText(MainActivity.this, 
    "获取号码归属地成功"+txtAddress, Toast.LENGTH_LONG).show();
            }
        };
    }

    四、附:常见的WebService服务URL

    手机归属地服务

    http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx

    天气预报Web服务,数据来源于中国气象局

    http://www.webxml.com.cn/WebServices/WeatherWebService.asmx

    IP地址来:

    http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx

    中文 <-> 英文双向翻译 WEB 服务:

    http://www.webxml.com.cn/WebServices/TranslatorWebService.asmx

    火车时刻表

    http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx

    航班查询服务

    http://webservice.webxml.com.cn/webservices/DomesticAirline.asmx

    中国股票行情数据 WEB 服务

    http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx

    中国电视节目预告

    http://www.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    IT头条

    无线路由大厂 TP-Link突然大裁员:补偿N+3

    02:39

    Meta 千万美金招募AI高级人才

    00:22

    更容易爆炸?罗马仕充电宝被北京多所高校禁用,公司紧急回应

    17:19

    天衍”量子计算云平台,“超算+量算” 告别“算力孤岛时代”

    18:18

    华为Pura80系列新机预热,余承东力赞其复杂光线下的视频拍摄实力

    01:28

    技术热点

    MySQL基本调度策略浅析

    MySQL使用INSERT插入多条记录

    SQL Server高可用的常见问题

    3D立体图片展示幻灯片JS特效

    windows 7上网看视频出现绿屏的原因及解决方法

    windows 7 64位系统的HOSTS文件在哪里?想用它加快域名解析

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。