如何将不同的对象作为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

  • AsyncTask和Looper.prepare()错误
  • Android在另一个完成后调用AsyncTask
  • Android Asynctask vs Runnable vs timertask vs Service
  • Android Phonegap:AsyncTask完成后通知javascript
  • Android的两个AsyncTasks串行或并行执行? - 第二个是冻结,但结果是好的
  • 从IntentService或AsyncTask调用REST API?
  • 我可以按顺序链接异步任务(在前一个asynctask完成后启动一个)
  • 在ActionBarActivity中从/等同于getActivity()
  • 一个不完美的工作解决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方法中,只需提取对象,以便可以根据需要处理它们。