【问题标题】:How to pass different objects as a parameter to AsycTask?如何将不同的对象作为参数传递给 AsyncTask?
【发布时间】:2011-02-03 11:06:12
【问题描述】:

我正在使用以下代码创建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 返回类型的对象。

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

【问题讨论】:

    标签: android android-asynctask


    【解决方案1】:

    一个不完美但可行的解决方案是使用 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");  
        }
    }
    

    此代码只是一个示例,您应该使用instanceof 确保索引 0 和 1 处的对象确实是一个文件或您的自定义列表。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-10
          • 2012-03-30
          • 2022-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多