Android asyncTask无法传递ArrayList<>作为参数

时间:2016-11-09 12:10:02

标签: android arraylist android-asynctask

我有这个asyncTask:

public class CreateZipFile extends AsyncTask<ArrayList<String>, Integer, File> {

    Context context;

    public CreateZipFile(Context context){
        this.context = context;
    }

    protected File doInBackground(ArrayList<String>... files) {
        for(String file : files){
        //DO SMTH
        }
        return null;
    }

    public void onProgressUpdate(Integer... progress) {

    }

    public void onPostExecute() {

    }
}

然而在我的foreach循环中,我得到错误,说需要ArrayList找到String。是否有可能asynctask将我的arraylist转换为String?

3 个答案:

答案 0 :(得分:2)

除非您想传递AsyncTask<ArrayList<String>,数组,否则不需要ArrayList...运算符称为varargs,可以像数组一样访问它。例如。如果你打电话

 new CreateZipFile().execute("a", "b");

然后,在

protected File doInBackground(String... files) {

files[0]包含afiles[1]包含b。如果您仍想传递ArrayList,则必须更改代码,如下所示:

 for (ArrayList<String> l : files) {
       for(String file : l){
           //DO SMTH
       }
   }

答案 1 :(得分:0)

尝试通过这种方式更改protected File doInBackground(ArrayList<String>... files) {

protected File doInBackground(ArrayList<String>... files) {
        ArrayList<String> passedFiles = files[0]; //get passed arraylist

        for(String file : passedFiles){
        //DO SMTH
        }
        return null;
    }

答案 2 :(得分:0)

您必须执行类似的操作

    Items[] items = new Items[SIZE]; 
    items[0]=ITEM1;
    items[1]=ITEM2;
    items[2]=ITEM3;
    .
    .
    .

    new InsertItemsAsync().execute(items);   

private static class InsertItemsAsync extends AsyncTask<Items,Void,Void>{
        @Override
        protected Void doInBackground(Items... items) {
          // perform your operations here
            return null;
        }
    }