2013-07-11 7 views
5

मैं एसिंक टास्क में उत्पन्न सूची को वापस गतिविधि में कैसे वापस कर सकता हूं?गतिविधि के रूप में AsyncTask वापसी सूची

मेरे LoadStringsAsync वर्ग:

public class LoadStringsAsync extends AsyncTask<Void, Void, List<String> > { 

    List<String> str; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     ... 
    } 

    @Override 
    protected List<String> doInBackground(Void... arg0) { 
     ... 
     get content from the internet 
     and 
     fill the list 
     ... 
    } 

    @Override 
    protected void onPostExecute(List<String> str) { 
     super.onPostExecute(events); 
     ... 

    } 
} 

और मैं इसके साथ काम करने के लिए मेरे गतिविधि में वापस सूची की जरूरत है। (न केवल सूची दृश्य में इसे दिखाने के लिए: पी)

कोई सुझाव यह कैसे करें? :-)

अभी तक धन्यवाद!

+0

http://stackoverflow.com/questions/17398837/processdialog-is-not-appearing-properly। इस मामले में यह जांचें कि आप एक स्ट्रिंग लौटते हैं। तदनुसार संशोधित करें – Raghunandan

+0

यह शायद इस बात पर निर्भर करता है कि आप सूची के साथ क्या करना चाहते हैं। क्या आप हमें और जानकारी प्रदान कर सकते हैं? – Enrichman

उत्तर

7

अपने गतिविधि:

public class YourActivity extends Activity { 
    private List<String> list = new ArrayList<String>(); 

    public void onCreate(Bundle state) { 
     //... 
    } 

    public void setList(List<String> list) { 
     this.list = list; 
    } 

    private void fireYourAsyncTask() { 
     new LoadStringsAsync(this).execute(); 
    } 

}  

AsyncTask:

public class LoadStringsAsync extends AsyncTask<Void, Void, List<String>> { 

    List<String> str; 
    private YourAcitivity activity; 

    public LoadStringsAsync(YourAcitivity activity) { 
     this.activity = activity; 
    } 

    @Override 
    protected List<String> doInBackground(Void... arg0) { 
    } 

    @Override 
    protected void onPostExecute(List<String> str) { 
     super.onPostExecute(events); 
     activity.setList(str); 
    } 
} 
+0

सही काम करता है! ...... उस विचार पर नहीं मिला: डी :) – Heisnberg

+0

प्रतीक 'घटनाओं' को हल नहीं कर सका –

+0

'ईवेंट' चर ऑप के प्रश्न में है। अपने स्वयं के चर का प्रयोग करें। – wtsang02

0

प्लेस कोड जो सूची का उपयोग करता है, या onPostExecute() के अंदर इसे एक चर में सेट करता है।

बेहतर की तरह माता-पिता की गतिविधि से अपने कार्य को चलाने:

public class MyActivity extends Activity{ 
    private List<String> mData = new ArrayList<String>(); 


    private void runTask(){ 
    new LoadStringsAsync(){ 

     @Override 
     protected void onPostExecute(List<String> str) { 
     super.onPostExecute(events); 
     mData.clear(); 
     mData.addAll(str); 
     } 

    }.execute(); 
    } 
} 
1

आप अपने AsyncTask अपनी गतिविधि में एक आंतरिक वर्ग बनाने, तो onPostExecute गतिविधि के रूप में एक ही संदर्भ में हो जाएगा, और आप सूची का उपयोग कर सकते जैसा कि आप गतिविधि में कहीं भी करेंगे।

यदि आप अपनी एसिंक टास्क को अपनी गतिविधि में एक आंतरिक कक्षा नहीं बनाते हैं, तो आपको AsyncTask समाप्त होने पर अपनी गतिविधि पर वापस कॉल करने के लिए श्रोता सेट अप करने की आवश्यकता है। यदि आप उस मार्ग पर जाना पसंद करते हैं तो this post देखें।

this post भी है जो आपके प्रश्न के समान है।

+4

इसे सबक्लास नहीं कहा जाता है। वार्डिंग होना चाहिए। "अपनी गतिविधि में एक आंतरिक वर्ग के रूप में AsyncTask लागू करें"। – wtsang02

+0

आप सही हैं, मैंने इसे बदल दिया है। – yiati

0

एंड्रॉइड link से प्रलेखन के अनुसार आप कम्प्यूटेशनल परिणाम लौटने के लिए get विधि का उपयोग कर सकते हैं। चूंकि आपका AsyncTask से पता चलता है कि आप एक सूची लौट रहे हैं, तो आप आप अतुल्यकालिक वर्ग

List<String> returnedlist=new LoadStringAsync().execute().get(); 

आशा इस विकल्प में मदद करता है बुला रहे हैं वर्ग में निम्न कोड की कोशिश कर सकते हैं।

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