android调用WebService实例分析
本文实例讲述了android调用WebService的方法。分享给大家供大家参考。具体如下:
WebService是一种基于SOAP协议的远程调用标准,通过webservice可以将不同操作系统平台、不同语言、不同技术整合到一块。在AndroidSDK中并没有提供调用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包。
java代码如下:
packagecom.arg; importjava.util.ArrayList; importjava.util.HashMap; importjava.util.Iterator; importjava.util.List; importjava.util.Map; importjava.util.Map.Entry; importandroid.app.Activity; importandroid.app.ProgressDialog; importandroid.os.Bundle; importandroid.os.Handler; importandroid.os.Message; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.EditText; importandroid.widget.ListView; importandroid.widget.SimpleAdapter; publicclassCallWebServiceActivityextendsActivity{ //显示结果的listview ListViewlistView=null; //输入文本框 EditTextprovinceEdit=null; //用于存放数据的集合list List<Map<String,Object>>data=null; //提示对话框 ProgressDialogmyDialog=null; //搜索按钮 ButtonsearchButton=null; /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); //获得文本输入框 provinceEdit=(EditText)this.findViewById(R.id.provinceEdit); //获得搜索按钮 searchButton=(Button)this.findViewById(R.id.searchButton); //为搜索按钮添加单击监听事件 searchButton.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewv){ //响应按钮单击事件的函数 ResponseOnClick(); } }); } //响应按钮单击事件的函数 publicvoidResponseOnClick(){ //创建一个线程 HttpThreadthread=newHttpThread(handler); //构造请求参数 HashMap<String,Object>params=newHashMap<String,Object>(); try{ CharSequenceetValue=provinceEdit.getText(); Stringname=""; if(etValue!=null){ //字符转码 name=newString(etValue.toString().getBytes(),"UTF-8"); } params.put("byProvinceName",name); }catch(Exceptionex){ ex.printStackTrace(); } // Stringurl="http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx"; //Stringurl="http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx"; StringnameSpace="http://WebXml.com.cn/"; StringmethodName="getSupportCity"; //开始新线程进行WebService请求 thread.doStart(url,nameSpace,methodName,params); } /** *捕获消息队列 * */ Handlerhandler=newHandler(){ publicvoidhandleMessage(Messagem){ ArrayList<String>myList=(ArrayList<String>)m.getData().getStringArrayList("data"); if(myList!=null){ if(data!=null){ data.clear(); }else{ data=newArrayList<Map<String,Object>>(); } for(inti=0;i<myList.size();i++){ Map<String,Object>item=newHashMap<String,Object>(); item.put("text",myList.get(i)); data.add(item); } /** *列表显示 * */ SimpleAdaptersimpleAdapter=newSimpleAdapter(CallWebServiceActivity.this ,data,R.layout.listlayout,newString[]{"text"},newint[]{R.id.showData}); listView=(ListView)findViewById(R.id.showListView); listView.setAdapter(simpleAdapter); } } }; /** *线程类 *@authorAdministrator * */ publicclassHttpThreadextendsThread{ privateHandlerhandle=null; Stringurl=null; StringnameSpace=null; StringmethodName=null; HashMap<String,Object>params=null; ProgressDialogprogressDialog=null; //构造函数 publicHttpThread(Handlerhander){ handle=hander; } /** *启动线程 */ publicvoiddoStart(Stringurl,StringnameSpace,StringmethodName, HashMap<String,Object>params){ //TODOAuto-generatedmethodstub this.url=url; this.nameSpace=nameSpace; this.methodName=methodName; this.params=params; progressDialog=ProgressDialog.show(CallWebServiceActivity.this,"提示","正在请求请稍等……",true); this.start(); } /** *线程运行 */ @Override publicvoidrun(){ //TODOAuto-generatedmethodstub System.out.println("jack"); super.run(); try{ //webservice请求 SoapObjectresult=(SoapObject)CallWebService(); //构造数据 ArrayList<String>list=null; if(result!=null&&result.getPropertyCount()>0){ list=newArrayList<String>(); for(inti=0;i<result.getPropertyCount();i++){ SoapPrimitivevalue=(SoapPrimitive)result.getProperty(i); list.add(value.toString()); } //a取消进度对话框 progressDialog.dismiss(); //构造消息 Messagemessage=handle.obtainMessage(); Bundleb=newBundle(); b.putStringArrayList("data",list); message.setData(b); handle.sendMessage(message); } }catch(Exceptionex){ ex.printStackTrace(); }finally{ } } /** *请求webservice */ protectedObjectCallWebService(){ StringSOAP_ACTION=nameSpace+methodName; //创建SoapObject实例 SoapObjectrequest=newSoapObject(nameSpace,methodName); //生成调用webservice方法的soap请求消息 SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(SoapEnvelope.VER11); //设置.netwebservice envelope.dotNet=true; //发送请求 envelope.setOutputSoapObject(request); //请求参数 if(params!=null&&!params.isEmpty()){ for(Iteratorit=params.entrySet().iterator();it.hasNext();){ Map.Entrye=(Entry)it.next(); request.addProperty(e.getKey().toString(),e.getValue()); } } // AndroidHttpTransportandroidHttpTrandsport=newAndroidHttpTransport(url); SoapObjectresult=null; try{ //webservice请求 androidHttpTrandsport.call(SOAP_ACTION,envelope); //得到返回结果 result=(SoapObject)envelope.getResponse(); }catch(Exceptionex){ ex.printStackTrace(); } returnresult; } } }
希望本文所述对大家的Android程序设计有所帮助。