Android 基于Web Service的应用之天气预报

本文介绍了如何在Android应用中使用Web Service获取并展示天气预报。通过调用Web Service接口,实现了获取省份、城市列表以及天气信息的功能。示例代码展示了如何处理SOAP响应,解析数据并更新UI显示天气状况。
摘要由CSDN通过智能技术生成

       我们都知道Web Service具有使用标准协议规范、使用协约的规范性、高度集成能力、完好的封装性、松散耦合等五大特点。正是因为这样Web Service就像Web上的构件编程,开发人员通过调用Service应用编程接口,将Web Service集成进他们的应用程序,就像调用本地服务一样,同时开发人员可以跨平台和使用任何编程语言。这些优点不仅减少了开发人员的开发成本从而可以将精力投入到挖掘软件的商业价值中,同时这也是面向构件接口编程的一种很好的体现。Web Service的核心技术基于XML标准,主要包括SOAP协议、ASDL描述、UDDI协议。Web Service主要是对一些已经存在的技术进行包装,因此它是基于现有的技术的一种整合技术。这些技术均在W3c上可以学习到。
       Android应用通常是运行在手机平台上,手机系统的硬件资源是有限的,不管是存储能力还是计算能力都是有限的,在Android系统上开发、运行的一些简单用户、小型用户是可能的,但是当进行大量的复杂计算时还是只能不是在远程服务器上。为了让Android应用与远程服务器之间进行交互,可以采用java的RMI技术,但这种技术要求远程服务器程序必须是java实现的,也可以采用CORBA技术,但这种技术相对复杂,因此采用Web Service是一种不错的选择。

       下面以一个Android的应用来调用Web Service实现天气预报功能。

        在开始之前我们必须先找到一个可以对外提供天气预报的Web Service如天气Web Service,同时也可以在该网站上下载天气预报所需要的各种图标等等。同时还得在项目中导入android-support-v4.jar和ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar两个jar包,这样才可以实现其功能。这两个jar包是Google为Android平台提供开发Web Service的。下面就是该应用的部分源码
public class WebServiceUtil
{
 // 定义Web Service的命名空间
 static final String SERVICE_NS = "http://WebXml.com.cn/";
 // 定义Web Service提供服务的URL
 static final String SERVICE_URL =
  "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx";

 // 调用远程Web Service获取省份列表
 public static List<String> getProvinceList()
 {
  // 调用的方法
  final String methodName = "getRegionProvince";
  // 创建HttpTransportSE传输对象
  final HttpTransportSE ht = new HttpTransportSE(SERVICE_URL);
  ht.debug = true;
  // 使用SOAP1.1协议创建Envelop对象
  final SoapSerializationEnvelope envelope =
   new SoapSerializationEnvelope(SoapEnvelope.VER11);
  // 实例化SoapObject对象
  SoapObject soapObject = new SoapObject(SERVICE_NS, methodName);
  envelope.bodyOut = soapObject;
  // 设置与.Net提供的Web Service保持较好的兼容性
  envelope.dotNet = true;  
  FutureTask<List<String>> task = new FutureTask<List<String>>(
  new Callable<List<String>>()
  {
   @Override
   public List<String> call()
    throws Exception
   {
    // 调用Web Service
    ht.call(SERVICE_NS + methodName, envelope);
    if (envelope.getResponse() != null)
    {
     // 获取服务器响应返回的SOAP消息
     SoapObject result = (SoapObject) envelope.bodyIn;
     SoapObject detail = (SoapObject) result.getProperty(
      methodName + "Result");
     // 解析服务器响应的SOAP消息。
     return parseProvinceOrCity(detail);
    }
    return null;
   }
  });
  new Thread(task).start();
  try
  {
   return task.get();
  }
  catch (Exception e)
  {
   e.printStackTrace();
  }
  return null;
 }

 // 根据省份获取城市列表
 public static List<String> getCityListByProvince(String province)
 {
  // 调用的方法
  final String methodName = "getSupportCityString";
  // 创建HttpTransportSE传输对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值