2011-02-03 101 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()的实际参数是可变参数列表,而不是单个对象。

相关问题