2011-02-03 22 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 को पर File ऑब्जेक्ट के साथ कैसे पास किया जाए।

उत्तर

21

एक सही लेकिन कामकाजी समाधान पैरामीटर के रूप में ऑब्जेक्ट का उपयोग करना है।

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 हैं।

ऑक्टैवियन डेमियन ने भी एक अच्छी विधि लिखी है ...

7

यदि आपको पैरामीटर के रूप में दो ऑब्जेक्ट्स पास करने की आवश्यकता है तो बस अपना खुद का धारक बनाएं और इसे धारक ऑब्जेक्ट भेजें।

आप एक ऑब्जेक्ट बनाते हैं जो फ़ाइल ऑब्जेक्ट के साथ आपकी कस्टम ऑब्जेक्ट रखता है। स्थिति के आधार पर आप अपनी कस्टम ऑब्जेक्ट को फ़ाइल ऑब्जेक्ट को भी पकड़ सकते हैं और कस्टम ऑब्जेक्ट 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 के एक निर्माता है कि 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]); 

चारा नहीं है लेता है doInBackground() पर वास्तविक पैरामीटर एक varargs सूची है और एक ऑब्जेक्ट नहीं है।

संबंधित मुद्दे

 संबंधित मुद्दे