首頁  >  文章  >  Java  >  android呼叫WebService實例分析

android呼叫WebService實例分析

高洛峰
高洛峰原創
2017-01-24 10:07:181342瀏覽

本文實例講述了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包。

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程式設計有幫助。

更多android呼叫WebService實例分析相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn