2012-10-31 110 views
0

我有以下三行代碼。僅在異步任務完成後執行代碼

Line 1 : GetBitMapFromURL gbmap = new GetBitMapFromURL(); //Obtain thumbnail bitmap 
Line 2 : gbmap.execute(applicationThumbNailURL); 
Line 3 : applicationThumbnailBitMap = gbmap.returnBitmap(); 

我希望第3行只有在執行GetBitMapFromURL異步任務的onPostExecute後才能執行。

+3

請解釋原因。爲什麼你不能把它放入onPostExecute回調? – Simon

+0

@Simon我正在使用相同的異步任務來執行不同的任務。 –

+1

http://stackoverflow.com/questions/10048958/android-calling-asynctask-right-after-an-another-finished and http://stackoverflow.com/questions/7494515/android-can-i-chain-async -task-sequential-starts-one-after-the-previous-as – user1690588

回答

3

在GetBitMapFromURL中創建回調。

public class GetBitMapFromURL extends AsyncTask<Void, Void, Void> { 

    private GetBitMapFromURLCallback mCallback = null; 

    public WebService(GetBitMapFromURLCallback callback) { 
     mCallback = callback; 
    } 

    @Override 
    protected Boolean doInBackground(Void... params) { 
     // ... 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     super.onPostExecute(result); 

     if (mCallback != null) { 
      mCallback.onGetBitMapFromURLComplete(this); 
     } 
    } 

    public interface GetBitMapFromURLCallback { 

     public void onGetBitMapFromURLComplete(GetBitMapFromURL getBitMapFromUrl); 
    } 
} 

public class MyActivity extends Activity implements GetBitMapFromURLCallback { 

    // ... 

    public void onGetBitMapFromURLComplete(GetBitMapFromURL getBitMapFromUrl) { 
     // This code will get called the moment the AsyncTask finishes 
    } 
} 

而讓你的活動實現這個回調和onGetBitMapFromURLComplete()

+0

所以基本上你的意思是在執行第3行GetBitMapFromURLCallback –

+1

我擴展了我的代碼 – shkschneider