編輯:關於Android編程
本文實例講述了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程序設計有所幫助。
引言在Google I/O 2014上,Google公布了Android L Preview版本,此版本的UI有了非常大的改變,很炫很給力!同時,Google也給出了兩個
我們公司最近開始使用GitHub 托管代碼,當然公司這種創建私有庫是要收費的,不同於個人上傳共享自己代碼,在這裡我就介紹下如何使用GitHub來進行團隊開發。首先加入你們
上一篇,我們基本知道了EventBus的使用步驟,接下來先簡單研究一下其中的源碼。在分析源碼之前,我們先回顧一下Java反射的知識點:JAVA反射機制基本定義:JAVA反
本文實現如下幾個界面之間的平移動畫實現分析:導航界面移動過程中,平移動畫上一頁移入動畫 (-屏幕寬度,y)------>(0,y)上一頁移出動畫 (0,y)----