2011-02-03 3 views
19

다음 코드를 사용하여 AsyncTask을 만듭니다.AsycTask에 다른 객체를 매개 변수로 전달하는 방법은 무엇입니까?

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"); 

    } 

} 

지금 나는 그것을 두 개의 매개 변수 customlistobject 및 무효 진보와 boolean 반환 유형 File 객체를 전달합니다.

customlistobject을 내 AsyncTaskFile 개체와 함께 전달하는 방법을 모르겠다.

답변

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"); 
    } 
} 

이 코드는 단지 샘플입니다, 당신은 인덱스 0과 1의 객체가 정말 파일 또는 instanceof를 사용하여 CustomList되어 있는지 확인해야합니다.

옥타 Damiean도 ...

좋은 방법을 작성했습니다
7

매개 변수로 두 개의 객체를 전달해야한다면 자신의 홀더를 만들어 홀더 객체로 보냅니다.

사용자 지정 개체를 File 개체와 함께 보유하는 개체를 만듭니다. 상황에 따라 사용자 정의 객체를 File 객체로 유지하고 AsyncTask 사용자 정의 객체를 전달할 수도 있습니다.

doInBackground 방법은 객체를 추출하여 필요한만큼 처리 할 수 ​​있습니다. 로,

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]); 

이 작동 :

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]); 

다른 옵션은 그 매개 변수를 사용하여 AsyncTask의 생성자를하는 것입니다 실제 매개 변수 doInBackground()은 varargs 목록이며 단일 객체는 아닙니다.

관련 문제