2014-12-23 77 views
0

我想讓文件操作類在後臺異步調用它的函數。我希望能夠使用AsyncTask的doInBackground方法在文件操作之間切換,但是當添加一個int參數用作開關時,會出現錯誤。將更多參數添加到AsynchTask doInBackground(Params ... params)

class Files extends AsyncTask<String[], Void, Boolean> { 
    private static final int COPY = 0; 
    private static final int DELETE = 1; 

    public boolean copy(String[] copyDir, String[] pasteDir) { 
     return doInBackground(COPY, copyDir, pasteDir); 
    } 

    public boolean delete(String[] files) { 
     return doInBackground(DELETE, files); 
    } 

    //Async operation handler 
    protected Boolean doInBackground(int o, String[]...files) { 
     Boolean task = false; 
     try { 
      //Operation switch 
      switch (o) { 
       case COPY: 
        task = copyFiles(files[0], files[1]); 
        break; 
       case DELETE: 
        task = deleteFiles(files[0]); 
        break; 
      } 
     } catch(IOException e) { 
      e.printStackTrace(); 
     } 
     return task; 
    } 

    public boolean copyFiles(String[] inputPaths, String[] outputPaths) throws IOException { 
     //Copy Logic 
    } 

    public boolean deleteFiles(String[] paths) throws IOException { 
     //Delete Logic 
    } 
} 

是否有類似於此實現的可能?如果不是,抽象方法不允許這樣的事情是什麼?

+0

我認爲你不能在doInBackground方法中傳遞兩個參數。閱讀這份文件。 http://developer.android.com/reference/android/os/AsyncTask.html這將清除你的概念。 – Sayem

+0

這個實現是不可能的。但你可以通過創建一個getter-setter類來保存多於一種類型的值,然後發送到'doInBackground'方法作爲vargs參數 –

+0

我該怎麼做呢?我需要使用一個對象數組並將其作爲可變參數傳遞進去嗎? – cjsimon

回答

0

使用多個構造函數/ setter傳遞要傳遞給的參數組,並在doInBackground方法根據setter方法傳遞給AsyncTask的操作類型。