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

更多相关文章

  1. Android Studio 3.0找不到Android Device Monitor的解决方法
  2. android 5.1 usb调试默认关闭设置方法
  3. Android--ListView滑动时出现黑屏解决方法(整合)
  4. Android不错的图片压缩方法
  5. Android延时任务方法
  6. Android listview中使用button解决方法
  7. Android中的Message类以及Java对象池的实现
  8. android 判断横竖屏的方法

随机推荐

  1. 【前端词典】必备知识-原型与原型链
  2. 【前端词典】分享 8 个有趣且实用的 API
  3. jQuery五彩Tab选项卡动画
  4. 10个超绚丽的HTML5动画赏析
  5. 【前端词典】提高幸福感的 9 个 CSS 技巧
  6. HTML5 3D环形方块翻转动画
  7. 【前端词典】几个有益的 CSS 小知识
  8. 这个jQuery相册很特别
  9. 一组强大的CSS3 Material 按钮
  10. HTML5粒子螺旋线条3D动画