android调用WebService实例分析
程序员文章站
2023-11-04 13:54:22
本文实例讲述了android调用webservice的方法。分享给大家供大家参考。具体如下:
webservice是一种基于soap协议的远程调用标准,通过webserv...
本文实例讲述了android调用webservice的方法。分享给大家供大家参考。具体如下:
webservice是一种基于soap协议的远程调用标准,通过webservice可以将不同操作系统平台、不同语言、不同技术整合到一块。在android sdk中并没有提供调用webservice的库,因此,需要使用第三方的sdk来调用webservice。pc版本的webservice客户端库非常丰富,例如axis2,cxf等,但这些开发包对于android系统过于庞大,也未必很容易移植到android系统中。因此,这些开发包并不是在我们的考虑范围内。适合手机的webservice客户端的sdk有一些,比较常用的有ksoap2,可以从进行下载;将下载的ksoap2-android-assembly-2.4-jar-with-dependencies.jar包复制到eclipse工程的lib目录中,当然也可以放在其他的目录里。同时在eclipse工程中引用这个jar包。
java代码如下:
package com.arg; import java.util.arraylist; import java.util.hashmap; import java.util.iterator; import java.util.list; import java.util.map; import java.util.map.entry; import android.app.activity; import android.app.progressdialog; import android.os.bundle; import android.os.handler; import android.os.message; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.edittext; import android.widget.listview; import android.widget.simpleadapter; public class callwebserviceactivity extends activity { //显示结果的listview listview listview=null; //输入文本框 edittext provinceedit=null; //用于存放数据的集合list list<map<string, object>> data=null; //提示对话框 progressdialog mydialog=null; //搜索按钮 button searchbutton=null; /** called when the activity is first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); //获得文本输入框 provinceedit=(edittext) this.findviewbyid(r.id.provinceedit); //获得搜索按钮 searchbutton=(button) this.findviewbyid(r.id.searchbutton); //为搜索按钮添加单击监听事件 searchbutton.setonclicklistener(new onclicklistener(){ public void onclick(view v) { //响应按钮单击事件的函数 responseonclick(); } }); } //响应按钮单击事件的函数 public void responseonclick(){ //创建一个线程 httpthread thread=new httpthread(handler); //构造请求参数 hashmap <string ,object> params=new hashmap<string ,object>(); try{ charsequence etvalue=provinceedit.gettext(); string name=""; if(etvalue!=null){ //字符转码 name=new string(etvalue.tostring().getbytes(),"utf-8"); } params.put("byprovincename", name); }catch(exception ex){ ex.printstacktrace(); } // string url="http://webservice.webxml.com.cn/webservices/weatherwebservice.asmx"; // string url = "http://webservice.webxml.com.cn/webservices/weatherwebservice.asmx"; string namespace = "http://webxml.com.cn/"; string methodname = "getsupportcity"; // 开始新线程进行webservice请求 thread.dostart(url, namespace, methodname, params); } /** * 捕获消息队列 * */ handler handler=new handler(){ public void handlemessage(message m){ arraylist <string> mylist=(arraylist<string>)m.getdata().getstringarraylist("data"); if(mylist !=null){ if(data !=null){ data.clear(); }else{ data=new arraylist<map <string, object>>(); } for(int i=0;i<mylist.size();i++){ map<string, object> item=new hashmap<string, object>(); item.put("text", mylist.get(i)); data.add(item); } /** * 列表显示 * */ simpleadapter simpleadapter=new simpleadapter(callwebserviceactivity.this ,data,r.layout.listlayout,new string[] {"text"},new int []{r.id.showdata}); listview=(listview) findviewbyid(r.id.showlistview); listview.setadapter(simpleadapter); } } }; /** * 线程类 * @author administrator * */ public class httpthread extends thread{ private handler handle=null; string url=null; string namespace=null; string methodname=null; hashmap <string ,object> params=null; progressdialog progressdialog=null; //构造函数 public httpthread(handler hander){ handle=hander; } /** * 启动线程 */ public void dostart(string url, string namespace, string methodname, hashmap<string, object> params) { // todo auto-generated method stub this.url=url; this.namespace=namespace; this.methodname=methodname; this.params=params; progressdialog=progressdialog.show(callwebserviceactivity.this, "提示","正在请求请稍等……", true); this.start(); } /** * 线程运行 */ @override public void run() { // todo auto-generated method stub system.out.println("jack"); super.run(); try{ //web service请求 soapobject result=(soapobject) callwebservice(); //构造数据 arraylist<string> list=null; if(result !=null && result.getpropertycount() > 0){ list=new arraylist<string>(); for(int i=0;i<result.getpropertycount();i++){ soapprimitive value=(soapprimitive) result.getproperty(i); list.add(value.tostring()); } //a取消进度对话框 progressdialog.dismiss(); //构造消息 message message=handle.obtainmessage(); bundle b=new bundle(); b.putstringarraylist("data", list); message.setdata(b); handle.sendmessage(message); } }catch(exception ex){ ex.printstacktrace(); }finally{ } } /** * 请求web service */ protected object callwebservice(){ string soap_action = namespace + methodname; //创建soapobject实例 soapobject request=new soapobject(namespace,methodname); //生成调用web service方法的soap请求消息 soapserializationenvelope envelope=new soapserializationenvelope(soapenvelope.ver11); //设置.net web service envelope.dotnet=true; //发送请求 envelope.setoutputsoapobject(request); //请求参数 if(params != null && !params.isempty() ){ for(iterator it=params.entryset().iterator();it.hasnext();){ map.entry e=(entry) it.next(); request.addproperty(e.getkey().tostring(),e.getvalue()); } } // androidhttptransport androidhttptrandsport=new androidhttptransport(url); soapobject result=null; try{ //web service请求 androidhttptrandsport.call(soap_action, envelope); //得到返回结果 result=(soapobject) envelope.getresponse(); }catch(exception ex){ ex.printstacktrace(); } return result; } } }
希望本文所述对大家的android程序设计有所帮助。