欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

android 调用WebService,androidwebservice

来源: 开发者 投稿于  被查看 7249 次 评论:272

android 调用WebService,androidwebservice


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包。

1.[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;   
	                   
	        }   
	   }   
	}   

用户评论