千家信息网

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

发表于:2025-11-17 作者:千家信息网编辑
千家信息网最后更新 2025年11月17日,这篇文章主要为大家展示了"android如何使用soap协议访问webservice实现天气预报功能",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"andr
千家信息网最后更新 2025年11月17日android如何使用soap协议访问webservice实现天气预报功能

这篇文章主要为大家展示了"android如何使用soap协议访问webservice实现天气预报功能",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"android如何使用soap协议访问webservice实现天气预报功能"这篇文章吧。

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

布局文件main.xml

                                    

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

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

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

获得天气状况


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

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

SoapObject result = (SoapObject) envelope.bodyIn;
SoapObject detail = (SoapObject) result.getProperty("getWeatherbyCityNameResult");

代码:

public class WeatherStateSearch {        public static SoapObject searchWea(String wsdlurl,String method,String cityname) {                //指定webservice的命名空间和调用的方法名                String namespace="http://WebXml.com.cn/";                SoapObject  soap=new SoapObject(namespace,method);                //添加属性,只要设置参数的顺序一致,调用方法的参数名不一定与服务端的WebService类中的方法参数名一致                soap.addProperty("theCityName",cityname);                //通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。                 SoapSerializationEnvelope soapEnvelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);                //设置需要传出的Soap                soapEnvelope.bodyOut=soap;                soapEnvelope.dotNet=true;                soapEnvelope.setOutputSoapObject(soap);                //创建http传输对象                HttpTransportSE transportSE=new HttpTransportSE(wsdlurl);                //soap操作url                String SOAP_ACTION=namespace+method;                try {                        //请求调用WebService方法                        transportSE.call(SOAP_ACTION, soapEnvelope);                        //使用getResponse获得WebService方法解析xml的返回结果                        SoapObject result=(SoapObject) soapEnvelope.getResponse();                        if(result!=null)                                return result;                } catch (IOException e) {                        e.printStackTrace();                } catch (XmlPullParserException e) {                        e.printStackTrace();                }                return null;        }}

5.项目main类的关键代码:

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

public class MainActivity extends Activity {        private EditText city;        private Button search;        private EditText weastate;        private ImageView img;             @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);      //查找组件        city=(EditText) this.findViewById(R.id.city);        search=(Button) this.findViewById(R.id.search);        weastate=(EditText) this.findViewById(R.id.state);        img=(ImageView) this.findViewById(R.id.image);        search.setOnClickListener(new OnClickListener() {                        public void onClick(View v) {                               String cname=city.getText().toString();                                //web服务端天气预报url                                String wsdlUrl="http://www.webxml.com.cn/webservices/weatherwebservice.asmx";                                //调用web提供的方法                                SoapObject weather=WeatherStateSearch.searchWea(wsdlUrl,"getWeatherbyCityName",cname);                                String state=weather.getProperty(10).toString();                                System.out.println(state);                                String strIcon=weather.getProperty(15).toString();                                //查询结果显示在结果文本域                                weastate.setText(state);                                //设置天气图片
                            img.setImageResource(parseIcon(strIcon));                       }                });    }    //查到的图片转换为项目中对应的int类型值        private int parseIcon(String strIcon) {                if ("0.gif".equals(strIcon)) return R.drawable.a_0;                if ("1.gif".equals(strIcon)) return R.drawable.a_1;                if ("3.gif".equals(strIcon)) return R.drawable.a_3;                if ("4.gif".equals(strIcon)) return R.drawable.a_4;                if ("5.gif".equals(strIcon)) return R.drawable.a_5;                if ("6.gif".equals(strIcon)) return R.drawable.a_6;                if ("7.gif".equals(strIcon)) return R.drawable.a_7;                if ("8.gif".equals(strIcon)) return R.drawable.a_8;                if ("9.gif".equals(strIcon)) return R.drawable.a_9;                if ("10.gif".equals(strIcon)) return R.drawable.a_10;                if ("11.gif".equals(strIcon)) return R.drawable.a_11;                if ("12.gif".equals(strIcon)) return R.drawable.a_12;                if ("13.gif".equals(strIcon)) return R.drawable.a_13;                if ("14.gif".equals(strIcon)) return R.drawable.a_14;                if ("15.gif".equals(strIcon)) return R.drawable.a_15;                if ("16.gif".equals(strIcon)) return R.drawable.a_16;                if ("17.gif".equals(strIcon)) return R.drawable.a_17;                if ("18.gif".equals(strIcon)) return R.drawable.a_18;                if ("19.gif".equals(strIcon)) return R.drawable.a_19;                if ("20.gif".equals(strIcon)) return R.drawable.a_20;                if ("21.gif".equals(strIcon)) return R.drawable.a_21;                if ("22.gif".equals(strIcon)) return R.drawable.a_22;                if ("23.gif".equals(strIcon)) return R.drawable.a_23;                if ("24.gif".equals(strIcon)) return R.drawable.a_24;                if ("25.gif".equals(strIcon)) return R.drawable.a_25;                if ("26.gif".equals(strIcon)) return R.drawable.a_26;                if ("27.gif".equals(strIcon)) return R.drawable.a_27;                if ("28.gif".equals(strIcon)) return R.drawable.a_28;                if ("29.gif".equals(strIcon)) return R.drawable.a_29;                if ("30.gif".equals(strIcon)) return R.drawable.a_30;                if ("31.gif".equals(strIcon)) return R.drawable.a_31;                return 0;        }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.activity_main, menu);        return true;    }}

以上是"android如何使用soap协议访问webservice实现天气预报功能"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0