热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android使用soap协议访问webservice实现天气预报功能

http:blog.csdn.netluran_fightingarticledetails8247278实现效果:首先创建布局文件,显示出需要查找的天

http://blog.csdn.net/luran_fighting/article/details/8247278

实现效果:

 

 

首先创建布局文件,显示出需要查找的天气情况,可以查出今天明天或者后天的天气情况。将需要的信息显示出来,想要显示查找的城市图片,要把所有的城市照片以城市代号命名的图片都要存储到项目中,数据量大,所以这里只是显示出天气的图片,共有三十二张,可以网上下载,记住顺序一定不要弄错。

布局文件main.xml


[html] view plaincopyprint?
  1. <LinearLayout xmlns:android&#61;"http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools&#61;"http://schemas.android.com/tools"  
  3.     android:layout_width&#61;"fill_parent"  
  4.     android:layout_height&#61;"match_parent"  
  5.     android:orientation&#61;"vertical"  
  6.     android:padding&#61;"10dp" >  
  7.   
  8.     <LinearLayout  
  9.         android:layout_width&#61;"fill_parent"  
  10.         android:layout_height&#61;"wrap_content"  
  11.         android:orientation&#61;"horizontal" >  
  12.   
  13.         <TextView  
  14.             android:layout_width&#61;"wrap_content"  
  15.             android:layout_height&#61;"wrap_content"  
  16.             android:gravity&#61;"left"  
  17.             android:text&#61;"输入城市&#xff1a;"  
  18.             android:textSize&#61;"20dp" />  
  19.   
  20.         <EditText  
  21.             android:id&#61;"&#64;&#43;id/city"  
  22.             android:layout_width&#61;"fill_parent"  
  23.             android:layout_height&#61;"wrap_content"  
  24.             android:gravity&#61;"fill_horizontal" >  
  25.         EditText>  
  26.     LinearLayout>  
  27.   
  28.     <Button  
  29.         android:id&#61;"&#64;&#43;id/search"  
  30.         android:layout_gravity&#61;"right"  
  31.         android:layout_width&#61;"wrap_content"  
  32.         android:layout_height&#61;"wrap_content"  
  33.         android:text&#61;"查询天气" />  
  34.   
  35.     <LinearLayout  
  36.         android:layout_width&#61;"fill_parent"  
  37.         android:layout_height&#61;"wrap_content"  
  38.         android:orientation&#61;"horizontal" >  
  39.   
  40.         <TextView  
  41.             android:layout_width&#61;"wrap_content"  
  42.             android:layout_height&#61;"wrap_content"  
  43.             android:gravity&#61;"top"  
  44.             android:text&#61;"天气情况&#xff1a;"  
  45.             android:textSize&#61;"20dp" />  
  46.   
  47.         <EditText  
  48.             android:id&#61;"&#64;&#43;id/state"  
  49.             android:layout_width&#61;"fill_parent"  
  50.             android:layout_height&#61;"wrap_content"  
  51.             android:ems&#61;"10"  
  52.             android:inputType&#61;"textMultiLine"  
  53.             android:minLines&#61;"4" />  
  54.     LinearLayout>  
  55.   
  56.     <LinearLayout  
  57.         android:layout_width&#61;"fill_parent"  
  58.         android:layout_height&#61;"wrap_content"  
  59.         android:orientation&#61;"horizontal" >  
  60.   
  61.         <TextView  
  62.             android:layout_width&#61;"wrap_content"  
  63.             android:layout_height&#61;"wrap_content"  
  64.             android:text&#61;"明日天气&#xff1a;"  
  65.             android:textSize&#61;"20dp" />  
  66.   
  67.         <ImageView  
  68.             android:id&#61;"&#64;&#43;id/image"  
  69.             android:layout_width&#61;"190dp"  
  70.             android:layout_height&#61;"160dp"  
  71.             android:scaleType&#61;"fitXY" />  
  72.     LinearLayout>  
  73.   
  74. LinearLayout>  


2.然后编写activity代码&#xff0c;因为要用到Soap协议&#xff0c;所以首先要到网站下载soap的jar包&#xff0c;这里用到的是ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar&#xff0c;因为比较高的版本&#xff0c;将jar包粘贴到项目libs文件下&#xff0c;环境会自动匹配将jar包加载&#xff0c;会在项目下的dependencies下找到soap包&#xff0c;则添加成功。

 

3.注意要用到网上资源解析xml&#xff0c;则在AndroidManifest.xml中设置用户权限

 

4.编写通过soap协议发送天气预报请求使用web服务得到并返回结果的工具类。

    获得天气状况

      (1)getResponse()方法查天气预报得到的是一系列的值&#xff0c;不是单一值&#xff0c;所以返回结果用SoapObject接收&#xff0c;调用它的getProperty()得到需要的信息&#xff0c;以下是getWeatherbyCityNameResult的23个属性&#xff1a;

 

      

     (2)获取数组这些属性值也可用另一种方法&#xff1a;

      SoapObject result &#61; (SoapObject) envelope.bodyIn;
      SoapObject detail &#61; (SoapObject) result.getProperty("getWeatherbyCityNameResult"&#xff09;&#xff1b;

代码&#xff1a;


[java] view plaincopyprint?
  1. "font-size:14px;">public class WeatherStateSearch {  
  2.     public static SoapObject searchWea(String wsdlurl,String method,String cityname) {  
  3.         //指定webservice的命名空间和调用的方法名  
  4.         String namespace&#61;"http://WebXml.com.cn/";  
  5.         SoapObject  soap&#61;new SoapObject(namespace,method);  
  6.         //添加属性&#xff0c;只要设置参数的顺序一致&#xff0c;调用方法的参数名不一定与服务端的WebService类中的方法参数名一致  
  7.         soap.addProperty("theCityName",cityname);  
  8.         //通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。   
  9.         SoapSerializationEnvelope soapEnvelope&#61;new SoapSerializationEnvelope(SoapEnvelope.VER11);  
  10.         //设置需要传出的Soap  
  11.         soapEnvelope.bodyOut&#61;soap;  
  12.         soapEnvelope.dotNet&#61;true;  
  13.         soapEnvelope.setOutputSoapObject(soap);  
  14.         //创建http传输对象  
  15.         HttpTransportSE transportSE&#61;new HttpTransportSE(wsdlurl);  
  16.         //soap操作url  
  17.         String SOAP_ACTION&#61;namespace&#43;method;  
  18.         try {  
  19.             //请求调用WebService方法  
  20.             transportSE.call(SOAP_ACTION, soapEnvelope);  
  21.             //使用getResponse获得WebService方法解析xml的返回结果  
  22.             SoapObject result&#61;(SoapObject) soapEnvelope.getResponse();  
  23.             if(result!&#61;null)  
  24.                 return result;  
  25.         } catch (IOException e) {  
  26.             e.printStackTrace();  
  27.         } catch (XmlPullParserException e) {  
  28.             e.printStackTrace();  
  29.         }  
  30.         return null;  
  31.     }  
  32. }  
  33.   
  34.   


 

5.项目main类的关键代码&#xff1a;

web服务端天气预报url&#xff1a;"http://www.webxml.com.cn/webservices/weatherwebservice.asmx";


[java] view plaincopyprint?
  1. public class MainActivity extends Activity {  
  2.     private EditText city;  
  3.     private Button search;  
  4.     private EditText weastate;  
  5.     private ImageView img;  
  6.        
  7.     &#64;Override  
  8.     public void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.activity_main);  
  11.       //查找组件  
  12.         city&#61;(EditText) this.findViewById(R.id.city);  
  13.         search&#61;(Button) this.findViewById(R.id.search);  
  14.         weastate&#61;(EditText) this.findViewById(R.id.state);  
  15.         img&#61;(ImageView) this.findViewById(R.id.image);  
  16.         search.setOnClickListener(new OnClickListener() {  
  17.             public void onClick(View v) {  
  18.                 "font-size:12px;">String cname&#61;city.getText().toString();  
  19.                 //web服务端天气预报url  
  20.                 String wsdlUrl&#61;"http://www.webxml.com.cn/webservices/weatherwebservice.asmx";  
  21.                 //调用web提供的方法  
  22.                 SoapObject weather&#61;WeatherStateSearch.searchWea(wsdlUrl,"getWeatherbyCityName",cname);  
  23.                 String state&#61;weather.getProperty(10).toString();  
  24.                 System.out.println(state);  
  25.                 String strIcon&#61;weather.getProperty(15).toString();  
  26.                 //查询结果显示在结果文本域  
  27.                 weastate.setText(state);  
  28.                                 //设置天气图片  


[java] view plaincopyprint?
  1. "font-size:12px;">              img.setImageResource(parseIcon(strIcon));  
  2.             }  
  3.         });  
  4.     }  
  5.     //查到的图片转换为项目中对应的int类型值  
  6.     private int parseIcon(String strIcon) {  
  7.         if ("0.gif".equals(strIcon)) return R.drawable.a_0;  
  8.         if ("1.gif".equals(strIcon)) return R.drawable.a_1;  
  9.         if ("3.gif".equals(strIcon)) return R.drawable.a_3;  
  10.         if ("4.gif".equals(strIcon)) return R.drawable.a_4;  
  11.         if ("5.gif".equals(strIcon)) return R.drawable.a_5;  
  12.         if ("6.gif".equals(strIcon)) return R.drawable.a_6;  
  13.         if ("7.gif".equals(strIcon)) return R.drawable.a_7;  
  14.         if ("8.gif".equals(strIcon)) return R.drawable.a_8;  
  15.         if ("9.gif".equals(strIcon)) return R.drawable.a_9;  
  16.         if ("10.gif".equals(strIcon)) return R.drawable.a_10;  
  17.         if ("11.gif".equals(strIcon)) return R.drawable.a_11;  
  18.         if ("12.gif".equals(strIcon)) return R.drawable.a_12;  
  19.         if ("13.gif".equals(strIcon)) return R.drawable.a_13;  
  20.         if ("14.gif".equals(strIcon)) return R.drawable.a_14;  
  21.         if ("15.gif".equals(strIcon)) return R.drawable.a_15;  
  22.         if ("16.gif".equals(strIcon)) return R.drawable.a_16;  
  23.         if ("17.gif".equals(strIcon)) return R.drawable.a_17;  
  24.         if ("18.gif".equals(strIcon)) return R.drawable.a_18;  
  25.         if ("19.gif".equals(strIcon)) return R.drawable.a_19;  
  26.         if ("20.gif".equals(strIcon)) return R.drawable.a_20;  
  27.         if ("21.gif".equals(strIcon)) return R.drawable.a_21;  
  28.         if ("22.gif".equals(strIcon)) return R.drawable.a_22;  
  29.         if ("23.gif".equals(strIcon)) return R.drawable.a_23;  
  30.         if ("24.gif".equals(strIcon)) return R.drawable.a_24;  
  31.         if ("25.gif".equals(strIcon)) return R.drawable.a_25;  
  32.         if ("26.gif".equals(strIcon)) return R.drawable.a_26;  
  33.         if ("27.gif".equals(strIcon)) return R.drawable.a_27;  
  34.         if ("28.gif".equals(strIcon)) return R.drawable.a_28;  
  35.         if ("29.gif".equals(strIcon)) return R.drawable.a_29;  
  36.         if ("30.gif".equals(strIcon)) return R.drawable.a_30;  
  37.         if ("31.gif".equals(strIcon)) return R.drawable.a_31;  
  38.         return 0;  
  39.     }  
  40.   
  41.     &#64;Override  
  42.     public boolean onCreateOptionsMenu(Menu menu) {  
  43.         getMenuInflater().inflate(R.menu.activity_main, menu);  
  44.         return true;  
  45.     }  
  46. }  
  47. "font-size:18px;">  

总结一下&#xff1a;

         在做项目时总在main中出现空指针异常&#xff0c;在设置天气图片资源的时候提示错误&#xff0c;后来经过分析测试&#xff0c;程序能够查到结果&#xff0c;并正确输出&#xff0c;我又看了遍程序原来没有查找图片视图组件&#xff0c;真是出了很低级的错误&#xff0c;下次定要认真&#xff0c;开始时就要看全代码&#xff0c;感觉自己写了其实还是没写&#xff0c;要确认一下才行&#xff0c;这样编程序才更有效率&#xff0c;错误少&#xff0c;完成时间短&#xff0c;才是一个成功的程序师。

 

 

呵呵……无论编写什么程序都会提高自己找错、纠错、少错的能力&#xff0c;提高编程能力&#xff0c;加油&#xff01;&#xff01;&#xff01;


推荐阅读
  • Postman 调试 WebService
    Postman调试WebServiceWebServicePostman设置Headers请求头参数Body请求体传参返回结果WebService天气预报Web服务http:ww ... [详细]
  • 1.一般应用(访问名称空间下方法)usenamespacemx_internal;vartextArea:TextAreaTextArea();textArae.htmlText ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • 1.WebServicea.定义:WebService是一种跨编程语言和跨操作系统平台的远程调用技术b.三大技术:XMLXSD,SOAP, ... [详细]
  • 我正在尝试删除我的文件夹之外的所有电子邮件帐户.收件箱使用python3和exchangelib。在testFolderaccount.rootTopofInformationSt ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文详细介绍了cisco路由器IOS损坏时的恢复方法,包括进入ROMMON模式、设置IP地址、子网掩码、默认网关以及使用TFTP服务器传输IOS文件的步骤。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 手把手教你使用GraphPad Prism和Excel绘制回归分析结果的森林图
    本文介绍了使用GraphPad Prism和Excel绘制回归分析结果的森林图的方法。通过展示森林图,可以更加直观地将回归分析结果可视化。GraphPad Prism是一款专门为医学专业人士设计的绘图软件,同时也兼顾统计分析的功能,操作便捷,可以帮助科研人员轻松绘制出高质量的专业图形。文章以一篇发表在JACC杂志上的研究为例,利用其中的多因素回归分析结果来绘制森林图。通过本文的指导,读者可以学会如何使用GraphPad Prism和Excel绘制回归分析结果的森林图。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • Python中sys模块的功能及用法详解
    本文详细介绍了Python中sys模块的功能及用法,包括对解释器参数和功能的访问、命令行参数列表、字节顺序指示符、编译模块名称等。同时还介绍了sys模块中的新功能和call_tracing函数的用法。推荐学习《Python教程》以深入了解。 ... [详细]
author-avatar
无敌腐女乐园
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有