当前位置:

首页 > 系统应用 > 7.4 Android 调用 WebService

7.4 Android 调用 WebService

本文目录

    本节引言: 前面已经把数据请求、数据解析、文件上传下载这些内容过了一遍,日常和服务器打交道的基础需求,基本也就覆盖得差不多了。接下来要聊的是 Android 调用 WebService。说白了,它和那些给外部提供原始数据 API 的服务平台有几分相似,比如聚合数据这类。不过,WebService 走

    本节引言:

    前面已经把数据请求、数据解析、文件上传下载这些内容过了一遍,日常和服务器打交道的基础需求,基本也就覆盖得差不多了。接下来要聊的是 Android 调用 WebService。说白了,它和那些给外部提供原始数据 API 的服务平台有几分相似,比如聚合数据这类。不过,WebService 走的是另一套常见思路:底层会用到 XML 和 SOAP,再通过 HTTP 协议,就能和远程机器完成交互。好了,闲话不多说,直接进入这一节的内容。

    1.WebService简介

    PS:如果看完上面的简介还是有点摸不着头绪,其实也没关系,之前公司用 C# 搭过一个 WebService!本节不展开讲 WebService 是怎么搭起来的,重点只放在一件事上:怎么去调用它提供的服务,怎么解析它返回的 XML 数据,再把相关内容展示到 Android 设备上,这就够了。

    2.去哪里获取WebService服务

    网上有很多提供WebService的站点,首先找到这些站点,然后获取相应的服务即可! 这里选取WebXml和云聚36wu作为例子给大家讲解下,他们的官网:

    webXml:http://www.webxml.com.cn/zh_cn/index.aspx

    以前是免费的,不过都商业化了,很多服务都要收费,但是可以试用~ 改站点上提供了16个不同的Web服务,可以根据自己的需求,查询相应服务,调用不同的接口!

    webXml的相关页面:

    相关使用次数说明:

    云聚36wu:http://www.36wu.com/Service

    同样也提供了很多的服务,很多手机的app都是用的这里的接口,比如彩虹公交,手机天气等 不过,这个也是要收费的=-=,可以试用,不过只能一小时内发送20次请求; 点击申请使用,获得key就可以了!两者随便选一个吧!

    3.第三方jar包的准备

    首先如果想在Android平台上调用WebService需要依赖于第三方类库:ksoap2 而在Android平台上,使用的是ksoap2 Android,一个高效,轻量级的SOAP开发包!

    jar包下载地址:https://code.google.com/p/ksoap2-android/wiki/HowToUse?tm=2

    天朝可能上不去,这里提供两个百度云的链接供大家下载使用:

    2.54版本:ksoap2-android 2.54.jar

    3.30版本:ksoap2-android 3.30.jar

    如果所幸你能进入jar包的下载地址的话,那么你会看到下面的界面:

    4.获取相关的一些参数

    首先找到我们需要获取的服务,然后记录相关的参数: NameSpace(命名空间),SoapAction以及URL就不用说了,其他参数这样找:

    比如我们这里找的是天气的查询参数,点进去我们可以看到这样一个参数文档:

    比如这里我们需要的是天气查询部分的功能:

    先把框住的SoapAction和NameSpace拷贝下来!当然我们可以在这个页面测试,另外 我们是免费用户,id可以不填直接跳过,输入后点击调用按钮会打开这样一个页面:

    嘿嘿,这里就是返回的XML,而我们要做的也就是解析这样一个XML,另外这里的 .gif代表的是天气图标!

    同理,我们再把归属地查询的看下SoapAction,NameSpace以及相关参数mark下!

    以及返回后的XML数据:

    5.注册并启用相关WEB服务

    点击我的Web服务器,然后点击试用,WebXML给我们提供了五天的免费试用, 我们把需要的两个服务器开启!

    好的,记得mark下我们自己的key哦~

    6.调用WebService的代码示例

    嗯,接下来我们来写代码验证调用WebService的流程:

    运行效果图:

    PS:这个号码是以前的号码=-=,别尝试拨打,已经换人了~ 另外天气服务好像有写问题,有时并不能获取到,估计是WebXml做的一些限制, 毕竟试用...

    实现代码:

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private EditText edit_param;
        private Button btn_attribution;
        private Button btn_weather;
        private TextView txt_result;
    private String city;
        private String number;
        private String result;
    //定义获取手机信息的SoapAction与命名空间,作为常量
        private static final String AddressnameSpace = "http://WebXml.com.cn/";
        //天气查询相关参数
        private static final String Weatherurl = "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx";
        private static final String Weathermethod = "getWeather";
        private static final String WeathersoapAction = "http://WebXml.com.cn/getWeather";
        //归属地查询相关参数
        private static final String Addressurl = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx";
        private static final String Addressmethod = "getMobileCodeInfo";
        private static final String AddresssoapAction = "http://WebXml.com.cn/getMobileCodeInfo";
    //定义一个Handler用来更新页面:
        private Handler handler = new Handler() {
            public void handleMessage(Message msg) {
                switch (msg.what) {
                    case 0x001:
                        txt_result.setText("结果显示:n" + result);
                        Toast.makeText(MainActivity.this, "获取天气信息成功", Toast.LENGTH_SHORT).show();
                        break;
                    case 0x002:
                        txt_result.setText("结果显示:n" + result);
                        Toast.makeText(MainActivity.this, "号码归属地查询成功", Toast.LENGTH_SHORT).show();
                        break;
                }
    }
        };
    @Override
        protected void onCreate(Bundle sa vedInstanceState) {
            super.onCreate(sa vedInstanceState);
            setContentView(R.layout.activity_main);
            bindViews();
        }
    private void bindViews() {
            edit_param = (EditText) findViewById(R.id.edit_param);
            btn_attribution = (Button) findViewById(R.id.btn_attribution);
            btn_weather = (Button) findViewById(R.id.btn_weather);
            txt_result = (TextView) findViewById(R.id.txt_result);
            btn_attribution.setOnClickListener(this);
            btn_weather.setOnClickListener(this);
        }
    @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_weather:
                    new Thread() {
                        @Override
                        public void run() {
                            getWether();
                        }
                    }.start();
                    break;
                case R.id.btn_attribution:
                    new Thread(new Runnable() {
                        public void run() {
                            getland();
                        }
                    }).start();
                    break;
            }
        }
    //定义一个获取某城市天气信息的方法:
        public void getWether() {
            result = "";
            SoapObject soapObject = new SoapObject(AddressnameSpace, Weathermethod);
            soapObject.addProperty("theCityCode:", edit_param.getText().toString());
            soapObject.addProperty("theUserID", "dbdf1580476240458784992289892b87");
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.bodyOut = soapObject;
            envelope.dotNet = true;
            envelope.setOutputSoapObject(soapObject);
            HttpTransportSE httpTransportSE = new HttpTransportSE(Weatherurl);
            System.out.println("天气服务设置完毕,准备开启服务");
            try {
                httpTransportSE.call(WeathersoapAction, envelope);
    //            System.out.println("调用WebService服务成功");
            } catch (Exception e) {
                e.printStackTrace();
    //            System.out.println("调用WebService服务失败");
            }
    //获得服务返回的数据,并且开始解析
            SoapObject object = (SoapObject) envelope.bodyIn;
            System.out.println("获得服务数据");
            result = object.getProperty(1).toString();
            handler.sendEmptyMessage(0x001);
            System.out.println("发送完毕,textview显示天气信息");
        }
    //定义一个获取号码归属地的方法:
        public void getland() {
            result = "";
            SoapObject soapObject = new SoapObject(AddressnameSpace, Addressmethod);
            soapObject.addProperty("mobileCode", edit_param.getText().toString());
            soapObject.addProperty("userid", "dbdf1580476240458784992289892b87");
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.bodyOut = soapObject;
            envelope.dotNet = true;
            envelope.setOutputSoapObject(soapObject);
            HttpTransportSE httpTransportSE = new HttpTransportSE(Addressurl);
            //    System.out.println("号码信息设置完毕,准备开启服务");
            try {
                httpTransportSE.call(AddresssoapAction, envelope);
                //System.out.println("调用WebService服务成功");
            } catch (Exception e) {
                e.printStackTrace();
                //System.out.println("调用WebService服务失败");
            }
    //获得服务返回的数据,并且开始解析
            SoapObject object = (SoapObject) envelope.bodyIn;//System.out.println("获得服务数据");
            result = object.getProperty(0).toString();//System.out.println("获取信息完毕,向主线程发信息");
            handler.sendEmptyMessage(0x001);
            //System.out.println("发送完毕,textview显示天气信息");
        }
    }

    另外,别忘了导包和Internet的权限!

    参考代码下载:

    WebServiceDemo.zip:下载 WebServiceDemo.zip

    本节小结:

    好的,本节关于Android端如何去使用这个WebService就讲解到这里,下一节我们来学习一个 类似于浏览器的Android控件——WebView,敬请期待~谢谢~!

    本文内容来源于网友投稿,如有侵权请联系删除。
    作者最新文章
    系统应用 Android
    相关文章 更多
    微软官网下载Win10 64位官方ISO镜像的完整步骤
    微软官网下载Win10 64位官方ISO镜像的完整步骤

    详解如何从微软官网获取纯净的Windows 10 64位ISO镜像文件,包括正确的下载入口、版本与语言选择技巧,以及下载后的完整性校验步骤,确保系统安装源安全可靠。

    Linux如何开启端口号?开放端口命令详解
    Linux如何开启端口号?开放端口命令详解

    详细讲解Linux如何开启端口号以及常用的开放端口命令。

    docker容器自动重启怎么解决 排查原因与修复方法
    docker容器自动重启怎么解决 排查原因与修复方法

    遇到Docker容器频繁自动重启?本文提供从查看容器日志、解读退出代码到配置Restart Policy的完整排查与修复方案,确保服务稳定性。

    Linux设置静态路由命令与永久生效教程
    Linux设置静态路由命令与永久生效教程

    学习如何在Linux中使用命令行添加临时静态路由,并通过修改网络配置文件实现重启后依然有效的永久静态路由设置,涵盖CentOS和Ubuntu的不同配置方法。

    摄像头连接电脑后怎么打开查看实时画面教程
    摄像头连接电脑后怎么打开查看实时画面教程

    摄像头连接电脑后不知如何查看画面?本教程演示如何使用Windows自带的“相机”应用快速调取实时视频流,无需下载额外软件,步骤简单直观,适用于大多数USB及内置摄像头。

    如何在 windows 11 关闭自动关机
    如何在 windows 11 关闭自动关机

    针对 Windows 11 电脑在无人操作时自动关机或重启的问题,本文详解如何通过任务计划程序禁用更新重启任务,并调整电源睡眠策略,从根源解决非预期的自动关机现象。

    android页面跳转屏幕方向改变变量如何解决
    android页面跳转屏幕方向改变变量如何解决

    详解Android应用中处理屏幕旋转导致Activity重建时的变量保存方法,包括使用onSaveInstanceState捆绑包和Jetpack ViewModel架构组件的最佳实践。

    电脑摄像头怎么测试人脸识别功能及效果判断方法
    电脑摄像头怎么测试人脸识别功能及效果判断方法

    详细讲解在Windows电脑上测试摄像头人脸识别功能的步骤,包括开启Windows Hello、录入面部数据、不同环境下的效果验证及常见问题排查,帮助用户确认设备兼容性与识别准确率。

    docker 容器无法启动的配置检查命令及排查方法
    docker 容器无法启动的配置检查命令及排查方法

    当 Docker 容器启动后立即退出时,不要盲目重启。本文详解如何通过 docker logs 查看标准输出错误,利用 docker inspect 检查挂载与网络配置,并修正入口点脚本权限问题,提供一套高效的因果排查流程。

    安卓手机投屏到电脑win10怎么设置教程
    安卓手机投屏到电脑win10怎么设置教程

    详解如何利用Windows 10自带功能将安卓手机画面投射至电脑屏幕,涵盖开启步骤、连接技巧及延迟分析,适合临时演示与多屏协作场景。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)
    Windows

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。