2011-02-03 148 views
19

我正在使用以下代碼創建AsyncTask如何將不同的對象作爲參數傳遞給AsycTask?

public class SaveFileToExternalStorage extends AsyncTask<File, Void, Boolean>{ 

    protected Boolean doInBackground(File... file) { 

     DalCategories c= new DalCategories(); 
     boolean result = c.saveObject(customlistobject,file[0]); 

     return result;  
    } 


    protected void onProgressUpdate() {  
     //setProgressPercent(progress[0]); 

    } 

    protected void onPostExecute(boolean result) {  
     //showDialog("Downloaded " + result + " bytes"); 

    } 

} 

現在我想傳遞兩個參數customlistobject與無效的進步和boolean返回類型File對象。

我不知道如何將customlistobjectFile對象一起傳遞到我的AsyncTask對象。

回答

21

一個不完美的工作解決方案是使用Object作爲參數。

public class SaveFileToExternalStorage extends AsyncTask<Object, Void, Boolean>{ 
    protected Boolean doInBackground(Object... param) { 
     File file = (File) param[0]; 
     List list = (CustomList) param[1]; 
     return result;  
    } 

    protected void onProgressUpdate() 
    {  
     //setProgressPercent(progress[0]); 
    } 

    protected void onPostExecute(boolean result) 
    {  
     //showDialog("Downloaded " + result + " bytes"); 
    } 
} 

這段代碼僅僅是一個樣品,你應該確保在索引0和1的對象是一個真正的文件或使用instanceof您CustomList。

屋大維也寫了一個很好的方法...

7

如果您需要將兩個對象作爲參數傳遞給它,只需創建您自己的支架並將其發送給支架對象。

您創建一個對象,該對象與File對象一起保存您的自定義對象。根據具體情況,您還可以使自定義對象僅包含File對象,並傳遞自定義對象的AsyncTask

doInBackground方法的內部只是提取對象,以便您可以根據需要處理它們。

7

一種選擇是讓你AsyncTask的一個構造函數的參數

public class SaveFileToExternalStorage extends AsyncTask<File, Void, Boolean>{ 
    List customlistobject; 

    public SaveFileToExternalStorage(List aList) { 
     customlistobject = aList; 
    } 

    protected Boolean doInBackground(File... file) { 

     DalCategories c= new DalCategories(); 
     boolean result = c.saveObject(customlistobject,file[0]); 

另一種選擇是通過對象的AsyncTask第一類參數:

public class SaveFileToExternalStorage extends AsyncTask<Object, Void, Boolean>{ 

    protected Boolean doInBackground(Object... objs) { 

     File file = (File) ibjs[1]; 
     List customlistobject = (List) objs[2]; 
     DalCategories c= new DalCategories(); 
     boolean result = c.saveObject(customlistobject,file[0]); 

這工作,因爲doInBackground()的實際參數是可變參數列表,而不是單個對象。

相關問題