如何将不同的对象作为参数传递给AsycTask?

UMA*_*MAR 19 android android-asynctask

我正在使用以下代码来创建一个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");  

    }

}
Run Code Online (Sandbox Code Playgroud)

现在我想传递两个带有void进度和返回类型的参数customlistobjectFile对象boolean.

我不知道如何将它与对象一起传递customlistobject给我.AsyncTaskFile

War*_*ith 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");  
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码只是一个示例,您应该确保索引0和1处的对象实际上是File或您的CustomList instanceof.

Octavian Damiean也写了一个很好的方法......


Oct*_*ean 7

如果您需要将两个对象作为参数传递,只需创建自己的持有者并将其发送给持有者对象.

您创建一个对象来保存您的自定义对象以及File对象.根据具体情况,您还可以使自定义对象只保存File对象并传递AsyncTask自定义对象.

doInBackground方法内部只提取对象,以便您可以根据需要处理它们.


Hei*_*upp 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]);
Run Code Online (Sandbox Code Playgroud)

另一个选项是将对象作为第一个类型参数传递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]);
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为实际参数doInBackground()是varargs列表而不是单个对象.