如何将不同的对象作为parameter passing给AsycTask?

我正在使用下面的代码来创build一个AsyncTask

 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"); } } 

现在我想传递两个参数customlistobjectFile对象与void进展和boolean返回types。

我不知道如何将这个customlistobjectFile对象一起传递给我的AsyncTask

Solutions Collecting From Web of "如何将不同的对象作为parameter passing给AsycTask?"

一个不完美的工作解决scheme是使用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的File或CustomList。

屋大维Damiean也写了一个很好的方法…

一个select是拥有一个你的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]); 

另一种select是将对象作为AsyncTask第一个typesparameter passing:

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

如果您需要将两个对象作为parameter passing给它,只需创build您自己的持有者并将其发送给持有者对象。

您可以创build一个对象来保存自定义对象以及File对象。 根据具体情况,您还可以使自定义对象只包含File对象,并将自定义对象传递给AsyncTask

doInBackground方法中,只需提取对象,以便可以根据需要处理它们。