2012-02-02 12 views
13

मेरे पास एक AsyncTask है, जो इंटरनेट से पार्स किए गए डेटा के साथ एक कस्टम सूची भरता है।एंड्रॉइड में PostExecute से गतिविधि को सही तरीके से कैसे शुरू करें?

PostExecute में मैं उस सूची को भरता हूं और इसे एक नई गतिविधि में स्थानांतरित करने के लिए तैयार हो जाता हूं।

@Override 
protected void onPostExecute(List<VideoDataDescription> result) 
{ 
    super.onPostExecute(result); 
    MainActivity.progressDialog.dismiss(); 

    context.startActivity(new Intent(context, ResultsQueryActivity.class)); 


} 

जहां संदर्भ

private Context context; 

LogCat में इस कोड को क्रियान्वित करने के बाद मैं एक Java.lang.NullPointerException मिलती है:

मैं इसे इस तरह से करते हैं। क्या यह एक गतिविधि शुरू करने के लिए यह संभव और सही है जैसा कि मैं करता हूं?

युपीडी मैं

private Context mContext; 


public YoutubeAndYahooParser(Context context) 
{ 
    super(); 
    this.mContext = context; 
} 

संदर्भ प्रारंभ और

Intent intent = new Intent(mContext, ResultsQueryActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
mContext.startActivity(intent);  

PostExecute में

YoutubeAndYahooParser youtubeAndYahooParser = new YoutubeAndYahooParser(ResultsQueryActivity.this); 
        youtubeAndYahooParser.execute("my string to pass in asynctak"); 

इसके बाद फोन मैं नया झंडा जोड़ा की वजह से मैं मिल गया है में शामिल किया है अगले में LogCat में:

* किसी गतिविधि संदर्भ के बाहर से प्रारंभ करने की क्रिया सक्रियता() को FLAG_ACTIVITY_NEW_TASK ध्वज की आवश्यकता होती है। क्या यह वास्तव में आप चाहते हैं? *

क्या मैं सही हूँ?

+2

आपने 'संदर्भ' कैसे शुरू किया है? – Vladimir

+0

लगता है, नहीं। संदर्भ प्रारंभ कैसे करें? –

+0

देखें dhaag23 का जवाब – Vladimir

उत्तर

32

आपको स्थानीय गतिविधि से संदर्भ के बजाय आवेदन संदर्भ में पास होना चाहिए। अर्थात। context.getAplicationContext() का उपयोग करें और इसे अपने AsyncTask सबक्लास में स्थानीय चर में सहेजें।

public class MyAsyncTask extends AsyncTask { 

    Context context; 
    private MyAsyncTask(Context context) { 
     this.context = context.getApplicationContext(); 
    } 

    @Override 
    protected Object doInBackground(Object... params) { 
     ... 
    } 

    @Override 
    protected void onPostExecute(List<VideoDataDescription> result) { 
     super.onPostExecute(result); 
     MainActivity.progressDialog.dismiss(); 

     context.startActivity(new Intent(context, ResultsQueryActivity.class)); 
    } 
} 

आप इस तरह इसे कहते हैं::

कोड हो सकता है कुछ इस तरह दिखता

new MyAsyncTask(context).execute(); 
+0

कृपया, क्या आप कोड आ सकते हैं इसे कैसे करें? मैंने विवरण के लिए विषय अपडेट किया। –

+0

कोड के साथ अपडेट किया गया। – dhaag23

+1

'नया MyAsyncTask (संदर्भ) .execute();' संदर्भ कहां से आता है? – dotty

16

मैं अभी-अभी यह कोशिश की ... यह PostExecute विधि में काम करता है !!!

Intent intent_name = new Intent(); 
intent_name.setClass(getApplicationContext(),DestinationClassName.class); 
startActivity(intent_name); 
संबंधित मुद्दे