Android调用WebService(ksoap2 天气预报)
来源:互联网 发布:厦门广电网络领导 编辑:程序博客网 时间:2024/04/30 03:20
WebService是一种基于SOAP协议的远程调用标准,通过webservice可以将不同操作系统平台、不同语言、不同技术整合到一块。在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。PC版本的WEbservice客户端库非常丰富,例如Axis2,CXF等,但这些开发包对于Android系统过于庞大,也未必很容易移植到Android系统中。因此,这些开发包并不是在我们的考虑范围内。适合手机的WebService客户端的SDK有一些,比较常用的有Ksoap2,可以从http://code.google.com/p/ksoap2-android/downloads/list进行下载;将下载的ksoap2-android-assembly-2.4-jar-with-dependencies.jar包复制到Eclipse工程的lib目录中,当然也可以放在其他的目录里。同时在Eclipse工程中引用这个jar包。
具体调用调用webservice的方法为:
(1) 指定webservice的命名空间和调用的方法名,如:
SoapObject request =new SoapObject(http://service,”getName”);
SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。第二个参数表示要调用的WebService方法名。
(2) 设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下:
Request.addProperty(“param1”,”value”);Request.addProperty(“param2”,”value”);
要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。
(3) 生成调用Webservice方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述,代码为:
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);Envelope.bodyOut = request;
创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。该版本号需要根据服务端WebService的版本号设置。在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,该属性的值就是在第一步创建的SoapObject对象。
(4) 创建HttpTransportsSE对象。通过HttpTransportsSE类的构造方法可以指定WebService的WSDL文档的URL:
HttpTransportSE ht=new HttpTransportSE(“http://192.168.18.17:80/axis2/service/SearchNewsService?wsdl”);
(5)使用call方法调用WebService方法,代码:
ht.call(null,envelope);
Call方法的第一个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象。
(6)使用getResponse方法获得WebService方法的返回结果,代码:
SoapObject soapObject =( SoapObject) envelope.getResponse();
以下为简单的实现一个天气查看功能的例子:
package com.wea.ther;import java.io.UnsupportedEncodingException;import org.ksoap2.SoapEnvelope;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.HttpTransportSE;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;public class WeatherTestActivity extends Activity {private Button okButton;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);okButton = (Button) this.findViewById(R.id.btn);okButton.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View v) {String city = "北京";getWeather(city);}});}private static final String NAMESPACE = "http://WebXml.com.cn/";// WebService地址private static String URL = "http://www.webxml.com.cn/webservices/weatherwebservice.asmx";private static final String METHOD_NAME = "getWeatherbyCityName";private static String SOAP_ACTION = "http://WebXml.com.cn/getWeatherbyCityName";private String weatherToday;private SoapObject detail;public void getWeather(String cityName) {try {System.out.println("rpc------");SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);System.out.println("rpc" + rpc);System.out.println("cityName is " + cityName);rpc.addProperty("theCityName", cityName);SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut = rpc;envelope.dotNet = true;envelope.setOutputSoapObject(rpc);HttpTransportSE ht = new HttpTransportSE(URL);// AndroidHttpTransport ht = new AndroidHttpTransport(URL);ht.debug = true;ht.call(SOAP_ACTION, envelope);// ht.call(null, envelope);// SoapObject result = (SoapObject)envelope.bodyIn;// detail = (SoapObject)// result.getProperty("getWeatherbyCityNameResult");detail = (SoapObject) envelope.getResponse();// System.out.println("result" + result);System.out.println("detail:---"+"\n" + detail);Toast.makeText(this, detail.toString(), Toast.LENGTH_LONG).show();parseWeather(detail);return;} catch (Exception e) {e.printStackTrace();}}private void parseWeather(SoapObject detail)throws UnsupportedEncodingException {String date = detail.getProperty(6).toString();weatherToday = "今天:" + date.split(" ")[0];weatherToday = weatherToday + "\n天气:" + date.split(" ")[1];weatherToday = weatherToday + "\n气温:" + detail.getProperty(5).toString();weatherToday = weatherToday + "\n风力:" + detail.getProperty(7).toString() + "\n";System.out.println("weatherToday is " + weatherToday);Toast.makeText(this, weatherToday, Toast.LENGTH_LONG).show();}}
转载于:http://express.ruanko.com/ruanko-express_34/technologyexchange5.html
- Android调用WebService(ksoap2 天气预报)
- Android中ksoap2-android调用WebService 实现天气预报
- android ksoap2调用webservice
- Android调用WebService(天气预报)
- Android之ksoap2-android详解与调用天气预报Webservice完整实例
- Android之ksoap2-android详解与调用天气预报Webservice完整实例
- android引用Ksoap2调用webservice
- Android利用KSOAP2调用webservice
- Android使用ksoap2 调用 WebService
- android ksoap2调用cxf webservice
- android ksoap2调用cxf webservice
- Android使用ksoap2调用webservice
- 使用ksoap2 调用 WebService(实例:调用天气预报服务)
- 使用ksoap2 调用 WebService(实例:调用天气预报服务)
- 使用ksoap2 调用 WebService(实例:调用天气预报服务)
- Android中调用WebService的实例(KSOAP2 )
- Android使用ksoap2-android调用WebService学习
- Android使用ksoap2-android调用WebService学习
- Java程序员从笨鸟到菜鸟之(二十八)Javascript总结之语言基础
- 21个免费的UI界面设计工具、资源及网站
- 11个让你代码整洁的原则
- 黑客基础知识学习
- java 16进制 byte[]和int之间的转换
- Android调用WebService(ksoap2 天气预报)
- java文件读取方法大全摘录
- android之旅时间进度
- Windows phone应用开发初体验(环境搭建+helloworld)
- 19个免费的UI界面设计工具及资源
- Eclipse插件:Eclipse Color Theme
- 破坏HelloWorld
- 5个让人激动的Java项目
- android 监听系统新安装程序的广播