2014-01-19 32 views
0

我已經創建瞭如下的異步類。如何使用AsyncTask將值設置回被調用的活動

class RetrieveClimateInformation extends AsyncTask<String, Void, ClimateInfo> { 
     protected ClimateInfo doInBackground(String... cityNames) { 
      //Creating ClimateInfo object and returning it. 
     } 

     protected void onPostExecute(ClimateInfo climateInfo) { 

     } 
} 

我從MainActivity產生了這個任務。

doInBackground方法我創建ClimateInfo對象並返回它。現在在onPostExecute()我必須將此對象設置爲MainActivity中的climateInfo字段。我怎樣才能做到這一點。我在Async任務中沒有MainActivity的對象。

RetrieveClimateInformation(MainActivity activity) { this.activity = activity } 

postExecute後並調用該方法像你所說或嵌套類的活動類中,這種方式:

回答

0

通過添加構造函數類傳遞到活動中的AsyncTask參考該任務將默認訪問您的活動。

0

擁有這個ClimateInfo很可能是不可序列化或不可分的,因此您將無法使用Intents來執行此操作,因此您將無法使用廣播。我認爲最簡單的方法是使用Handler發送一個Message對象,在該對象中可以包含所需的任何對象。在handleMessage方法中,只需將Message.obj對象轉換爲ClimateInfo即可。

Activity簡單聲明Handler,一旦被初始化,您AsyncTasksetHandler(Handler activity_handler)聲明的方法,並儘快從您的Activity稱其爲您初始化AsyncTask。這樣,你傳遞的是關於你AsyncTask擴展,每當你需要一個Message發送到您的Activity,只需做你AsyncTask類中是這樣的:

final Message my_climate = new Message(); 
my_climate.obj = your_climate_object; 

ActivityHandler.send(my_climate); 
0

把異步類的活動裏

公共類MainActivity擴展活動{ 。 。 。 。

公共類myTask擴展的AsyncTask <> {

}

}

而且在您的文章execute方法,你可以從裏面的任務設置變量

相關問題