Android asyncTask .

來源:互聯網
上載者:User
 

AsyncTask是抽象類別,子類必須實現抽象方法doInBackground(Params... p) ,在此方法中實現任務的執行工作,比如串連網路擷取資料等。
通常還應該實現onPostExecute(Result r) 方法,因為應用程式關心的結果在此方法中返回。需要注意的是AsyncTask一定要在主線程中建立執行個體。AsyncTask定義了三種泛型型別 Params,Progress和Result。
    * Params 啟動任務執行的輸入參數,比如HTTP請求的URL。
    * Progress 背景工作執行的百分比。
    * Result 後台執行任務最終返回的結果,比如String。

       AsyncTask 的執行分為四個步驟,每一步都對應一個回調方法,需要注意的是這些方法不應該由應用程式調用,開發人員需要做的就是實現這些方法。在任務的執行過程中,這些方法被自動調用。

    * onPreExecute() 當任務執行之前開始調用此方法,可以在這裡顯示進度對話方塊。
    * doInBackground(Params...) 此方法在後台線程 執行,完成任務的主要工作,通常需要較長的時間。在執行過程中可以調用publicProgress(Progress...)來更新任務的進度。
    * onProgressUpdate(Progress...) 此方法在主線程 執行,用於顯示任務執行的進度。
    * onPostExecute(Result) 此方法在主線程 執行,任務執行的結果作為此方法的參數返回。


貼一個完整的例子:


SOAPWebservice.java

 

package com.android.Webservice;import java.util.HashMap;import java.util.Iterator;import java.util.Map.Entry;import org.ksoap2.SoapEnvelope;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.AndroidHttpTransport;import android.os.AsyncTask;import android.os.Message;import android.util.Log;public class SOAPWebservice extends AsyncTask<Object, Void, Object> {/* *非同步呼叫 */@SuppressWarnings("unchecked")@Overrideprotected Object doInBackground(Object... params) { // parametersString serviceUrl = params[0].toString();String nameSpace = params[1].toString();String methodName = params[2].toString();HashMap<String, String> hashMap = (HashMap<String, String>)params[3];try {String SOAP_ACTION = nameSpace + methodName;// 第1步: 建立SoapObject對象,指定WebService的命名空間和調用方法名SoapObject request = new SoapObject(nameSpace, methodName);// 第2步: 建立WebService方法的參數Iterator<Entry<String, String>> iterator = hashMap.entrySet().iterator();  while (iterator.hasNext()) {Entry<String, String> entry = (Entry<String, String>) iterator.next();Object value= entry.getValue();Object key =entry.getKey();request.addProperty(key.toString(), value.toString());}// 第3步:建立SoapSerializationEnvelope對象,並指定WebService的版本SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);// 設定bodyOut屬性envelope.bodyOut = request;// 設定.net的Webservice ,要不然會出錯envelope.dotNet = true;// 第4步:建立HttpTransportSE對象,並指定WSDL文檔的URLAndroidHttpTransport ht = new AndroidHttpTransport(serviceUrl);ht.debug = true;// 調用WebServiceht.call(SOAP_ACTION, envelope);// 第6步: 使用getResponse方法獲得WebService方法的返回結果SoapObject soapObject = (SoapObject) envelope.getResponse();return soapObject;} catch (Exception e) {Log.e("WEB_exception", e.getMessage());e.printStackTrace();}return null;}@Override  protected void onPostExecute(Object result) {  Message msg = new Message();msg.what = 1;msg.obj = result;handleMessage(msg);}  public boolean handleMessage(Message msg) {// TODO Auto-generated method stubreturn false;}/* * 同步調用 *//*public SoapObject getWebService(String serviceUrl, String nameSpace,String methodName, HashMap<String, String> hashMap) {try {String SOAP_ACTION = nameSpace + methodName;// 第1步: 建立SoapObject對象,指定WebService的命名空間和調用方法名SoapObject request = new SoapObject(nameSpace, methodName);// 第2步: 建立WebService方法的參數Iterator<Entry<String, String>> iterator = hashMap.entrySet().iterator();  while (iterator.hasNext()) {Entry<String, String> entry = (Entry<String, String>) iterator.next();Object value= entry.getValue();Object key =entry.getKey();request.addProperty(key.toString(), value.toString());}// 第3步:建立SoapSerializationEnvelope對象,並指定WebService的版本SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);// 設定bodyOut屬性envelope.bodyOut = request;// 設定.net的webservice ,要不然會出錯envelope.dotNet = true;// envelope.setOutputSoapObject(request);// 第4步:建立HttpTransportSE對象,並指定WSDL文檔的URL// HttpTransportSE ht = new HttpTransportSE(serviceUrl);AndroidHttpTransport ht = new AndroidHttpTransport(serviceUrl);ht.debug = true;// 調用WebServiceht.call(SOAP_ACTION, envelope);// 第6步: 使用getResponse方法獲得WebService方法的返回結果SoapObject soapObject = (SoapObject) envelope.getResponse();return soapObject;} catch (Exception e) {Log.e("WEB_exception", e.getMessage());e.printStackTrace();}return null;}*/}

 

Webservice.java

 

 

package com.android.Webservice;import java.util.HashMap;import org.ksoap2.serialization.SoapObject;import android.app.Activity;import android.os.Bundle;import android.os.Message;import android.util.Log;public class Webservice extends Activity {private static final String serviceUrl = "webservice地址";private static final String nameSpace = "命名空間";private static final String methodName = "方法名";    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                HashMap<String, String> hashMap = new HashMap<String, String>();        hashMap.put("secuCode", "sh600036");        hashMap.put("count", "100");                try {        new SOAPWebservice(){        @Override        public boolean handleMessage(Message msg) {        switch (msg.what) {        case 1:        onFinishLoadData((SoapObject)msg.obj);        break;        }        return false;                }        }.execute(serviceUrl, nameSpace, methodName, hashMap);        }catch(Exception e) {        e.printStackTrace();        }    }        public void onFinishLoadData(SoapObject soapObject) {    for (int i = 0; i < soapObject.getPropertyCount(); i++) {        SoapObject object1 = (SoapObject)soapObject.getProperty(i);            Log.e("TradingDay", (object1.getProperty("TradingDay")).toString());        }    }}

 

文章源處:http://blog.csdn.net/ASIANJIANG/article/details/5672693

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.