2011-07-02 47 views
1

我有2個微調,使用的AsyncTask如何運行多個AsyncTask?

我使用這個

它的工作原理調用AsyncTasks如果我只叫一個的AsyncTask的一個微調

但是從數據庫加載 每個微調的數據!

我有2個紗廠,所以我稱之爲的AsyncTask每個微調這樣

new PopulateSpinnerA().execute(); // for Spinner A 
new PopulateSpinnerB().execute(); // for Spinner B 

我運行它,我的應用程序強制關閉

解決方案?

更新!

我從別人下面誰真假使用布爾(真假播放),使我的兩個微調產生

第一

IM回答獲得靈感我做一個布爾變量

Boolean SPN = false; 

然後我做一個函數來檢查布爾,並把它的onCreate()函數

private void cek(){ 
     if(!SPN){ 
      new populateSpinnerA().execute(); 
     } 
     if(SPN){ 
      new populateSpinnerB().execute(); 
     } 
    } 

上populateSpinnerA()我只是把這個2號線運行第二個微調的的AsyncTask

SPN = true; 
cek(); 

BOOM!

它已完成:D

+0

stacktrace好嗎? –

+0

那是什麼? 我不知道 – Falmesino

+0

顯示您在Logcat中得到的錯誤消息 – Lavanya

回答

1

一次不能有兩個微調器。在這種情況下需要使用任何技巧,

  1. 只能使用一個微調器。
  2. 在啓動第一個微調器時啓動微調器。
  3. 在PostExecute上使用一個通用標誌。
  4. 在步驟3之前,在兩個AsyncTask的postExecute上檢查該標誌是否已設置,如果是,則取消該微調器。

請參閱下面的僞代碼。

postExecute(){ 
     If(taskCompletedFlag == true){ 
      //Code to cancel the spinner. 
      taskCompletedFlag = false; 
     }else{ 
      taskCompledtedFlag = true; 
     } 
} 

P.S. - 如果你不知道哪個AsyncTask會首先啓動,那麼你可以在那裏使用相同的機制。

+0

我從這個答案中得到靈感:D – Falmesino