Android开发调用WebService的方法示例
本文实例讲述了android开发调用webservice的方法。分享给大家供大家参考,具体如下:
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();
以下为简单的实现一个天气查看功能的例子:
public class webservice extends activity { 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 button okbutton; private soapobject detail; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); okbutton = (button) findviewbyid(r.id.ok); okbutton.setonclicklistener(new button.onclicklistener() { public void onclick(view v) { showweather(); } }); } private void showweather() { string city = "武汉"; getweather(city); } @suppresswarnings("deprecation") 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); androidhttptransport ht = new androidhttptransport(url); ht.debug = true; soapserializationenvelope envelope = new soapserializationenvelope( soapenvelope.ver11); envelope.bodyout = rpc; envelope.dotnet = true; envelope.setoutputsoapobject(rpc); ht.call(soap_action, envelope); soapobject result = (soapobject) envelope.bodyin; detail = (soapobject) result .getproperty("getweatherbycitynameresult"); system.out.println("result" + result); system.out.println("detail" + detail); toast.maketext(webservice.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(webservice.this, weathertoday, toast.length_long).show(); } }
更多关于android相关内容感兴趣的读者可查看本站专题:《android基本组件用法总结》、《android视图view技巧总结》、《android资源操作技巧汇总》、《android操作json格式数据技巧总结》、《android开发入门与进阶教程》、《android编程之activity操作技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。
上一篇: Android实现简单实用的搜索框
下一篇: Ai怎么绘制清新的绿色环保图标?
推荐阅读
-
Java调用SQL脚本执行常用的方法示例
-
Android编程中光线传感器的调用方法详解
-
Android编程简单解析JSON格式数据的方法示例
-
iOS App使用设计模式中的模板方法模式开发的示例
-
在Android中访问WebService接口的方法
-
Android开发笔记之:如何安全中止一个自定义线程Thread的方法
-
解决Fedora14下eclipse进行android开发,ibus提示没有输入窗口的方法详解
-
Android开发笔记之:在ImageView上绘制圆环的实现方法
-
Android开发基础之创建启动界面Splash Screen的方法
-
Android编程开发之打开文件的Intent及使用方法