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程序设计有所帮助。