Android天气预报

1、指定 WebService 的命名空间和调用方法
import org.ksoap2.serialization.SoapObject;
private static final String NAMESPACE = "http://WebXml.com.cn/";
private static final String METHOD_NAME = "getWeatherbyCityName";
SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);
SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。
第二个参数表示要调用的WebService方法名。
2、设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下:
rpc.addProperty("theCityName", "北京");
要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。
3、生成调用Webservice方法的SOAP请求信息。
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut = rpc;envelope.dotNet = true;envelope.setOutputSoapObject(rpc);
创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。
该版本号需要根据服务端WebService的版本号设置。
在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,
该属性的值就是在第一步创建的SoapObject对象。
4、创建HttpTransportsSE对象。
这里不要使用 AndroidHttpTransport ht = new AndroidHttpTransport(URL); 这是一个要过期的类
private static String URL = "http://www.webxml.com.cn/webservices/weatherwebservice.asmx";HttpTransportSE ht = new HttpTransportSE(URL); ht.debug = true;
5、使用call方法调用WebService方法
private static String SOAP_ACTION = "http://WebXml.com.cn/getWeatherbyCityName";ht.call(SOAP_ACTION, envelope);
网上有人说这里的call的第一个参数为null,但是经过我的测试,null是不行的。
第2个参数就是在第3步创建的SoapSerializationEnvelope对象。
6、获得WebService方法的返回结果
有两种方法:
(1)、使用getResponse方法获得返回数据。
private SoapObject detail;
detail =(SoapObject) envelope.getResponse();
(2)、使用 bodyIn 及 getProperty。
private SoapObject detail;
SoapObject result = (SoapObject)envelope.bodyIn;detail = (SoapObject) result.getPropert ("getWeatherbyCityNameResult");
7、 这时候执行会出错,提示没有权限访问网络
需要修改 AndroidManifest.xml 文件,赋予相应权限
简单来说就是增加下面这行配置:<uses-permission android:name="android.permission.INTERNET"></uses-permission>
完整的 AndroidManifest.xml 文件 如下:
注:Android 中在代码中为了调试写了system.out.print()输出项
在菜单:Window-->show view-->other-->找到Android,选择Logcat 是可以看到输出的,
如果你想在一个单独的窗口看到system.out.print()的输出的话,可以在logcat界面点那个绿色的“+”好,
在Filter name 和 By log tag里面均填入System.out,这样的话你就能在单独的界面查看system.out.print()的输出了!!

主要代码:

date.setText(weatherarr[1]);
today.setText(weatherarr[5]+"\n"+weatherarr[6]+"\n"+weatherarr[7]); //今天天气
tomorrow.setText(weatherarr[12]+"\n"+weatherarr[13]+"\n"+weatherarr[14]); //明天天气
after.setText(weatherarr[17]+"\n"+weatherarr[18]+"\n"+weatherarr[19]); //后天天气
//Log.i("cc",weatherarr[8]);
todayimage.setImageResource(WeatherUtil.getImage(weatherarr[8]));
tomrrowimage.setImageResource(WeatherUtil.getImage(weatherarr[15]));
afterimage.setImageResource(WeatherUtil.getImage(weatherarr[20])); SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("theCityName", cityNo);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = request;
envelope.dotNet = true; HttpTransportSE transport = new HttpTransportSE(URL);
transport.debug = true;
transport.call(NAMESPACE + METHOD_NAME, envelope); SoapObject result = (SoapObject) envelope.getResponse();
int count = result.getPropertyCount();
arr=new String[count];
for (int i = 0; i < count; i++) {
arr[i]=result.getProperty(i).toString();
}

参考链接:http://www.apkbus.com/forum.php?mod=viewthread&tid=52971

代码下载链接:http://download.csdn.net/detail/klcf0220/6458907(推荐,示例代码。)

http://www.apkbus.com/forum.php?mod=viewthread&tid=143260

http://www.apkbus.com/forum.php?mod=viewthread&tid=143186

Android天气预报的更多相关文章

  1. Android天气预报+百度天气接口

    首先 在准备编敲代码之前有几点准备工作 1首先须要调节Android的DNS地址. (这个我会在末尾提及) http://www.eoeandroid.com/forum.php? mod=viewt ...

  2. <Android 应用 之路> 天气预报(一)

    Android天气预报客户端 设计思路 欢迎界面,版本号,应用名 + 数据后台加载(所有城市的信息获取) 数据加载完成后跳转到显示界面,显示所有查询到的城市的天气信息 欢迎界面和天气显示界面分别为单独 ...

  3. 45个android实例源码

    分享45个android实例源码,很好很强大http://www.apkbus.com/android-20978-1-1.html andriod闹钟源代码http://www.apkbus.com ...

  4. 分享45个android实例源码,很好很强大

    分享45个android实例源码,很好很强大 http://www.apkbus.com/android-20978-1-1.html 分享45个android实例源码,很好很强大http://www ...

  5. 【转】近百个Android优秀开源项目

    近百个Android优秀开源项目   Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项目,贡献出他们的智慧 ...

  6. android经典Demo(转载)

    一篇不错的资源博文,转载分享给大家:   1.Android团队提供的示例项目  如果不是从学习Android SDK中提供的那些样例代码开始,可能没有更好的方法来掌握在Android这个框架上开发. ...

  7. ym——安卓巴士总结了近百个Android优秀开源项

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 1.Android团队提供的演示样例项目 假设不是从学习Android SDK中提供的 ...

  8. 分享45个android实例源码,很好很强大.收藏吧!!!

    andriod闹钟源代码 http://www.apkbus.com/android-20974-1-1.html android源码分享之指南针程序 http://www.apkbus.com/an ...

  9. Android源码50例汇总,欢迎各位下载(转载)

    下载中心好资料很多,藏在各个角落,小弟在此帮大家做了一个整理,做了一个下载目录,方便大家选择性下载. 源码实例如下: <Android应用开发揭秘>源代码推荐 http://down.51 ...

随机推荐

  1. C# String类&Math类&DateTime类

    String类: String a = "abcdefghijklmnopqrstuvwxyz"; int length = a.length;  //获取字符串的长度: a = ...

  2. spring-mvc springboot 使用MockMvc对controller进行测试

    网上基本都是参考官方的使用方式,使用了import static,个人感觉这种方式特别不好,代码提示性不友好.所以在此进行说明,也方便自己以后使用. 1. 引入spring-test相关jar包,sp ...

  3. A1100. Mars Numbers

    People on Mars count their numbers with base 13: Zero on Earth is called "tret" on Mars. T ...

  4. javascript面向对象精要第三章对象整理精要

    什么是对象的数据属性?什么是对象的访问器属性?[put]方法是默认创建数据属性的,访 问器属性不包含值而是定义了一个单属性被读取时调用的函数(getter)和当一个属性被写入时 调用的函数(sette ...

  5. Codeforce使用方式

    突然想起写这个东西,因为当时新手的我,完全不知道cf的比赛该如何参加,因为近期没有比赛,所以我会在有比赛时截图再写这个博客,我会在2018/5/10号之前完成,想看的先关注一下.

  6. JVM综合调优汇总

    一.堆大小设置 JVM 中最大堆大小有三方面限制: 1. 相关操作系统的数据模型(32-bt还是64-bit)限制: 2. 系统的可用虚拟内存限制: 3. 系统的可用物理内存限制. 32位系统下,一般 ...

  7. js位操作

    1.&(与) 都是1才是1 例如:14&15  (14  二进制  1110 15  二进制   1111 &与的结果  1110  ---->结果14) (14& ...

  8. GBDT用于分类问题

    一.简介 GBDT在传统机器学习算法里面是对真实分布拟合的最好的几种算法之一,在前几年深度学习还没有大行其道之前,gbdt在各种竞赛是大放异彩.原因大概有几个 一:效果确实挺不错. 二:既可以用于分类 ...

  9. Study 5 —— CSS概述

    CSS(Cascading Style Sheet)称为层叠样式表,也可以称为CSS样式表或样式表,其文件扩展名为.css,CSS是用于增强或控制网页样式,并允许将样式信息与网页内容分离的一种标记性语 ...

  10. Spring面向切面编程AOP(around)实战

    spring aop的环绕通知around功能强大,我们这里就不细说,直接上代码,看着注释就能明白 需要的可以点击下载源码 1.如果使用注解的方式则需要先创建个注解类 package com.mb.a ...