2012-02-02 17 views
13

Ho un AsyncTask, che riempie un Elenco personalizzato con dati analizzati da Internet.Come avviare correttamente l'attività da PostExecute in Android?

In PostExecute riempio questa lista e la prendo pronta per trasferirla in una nuova attività.

lo faccio in questo modo:

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

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


} 

cui contesto

private Context context; 

In LogCat dopo l'esecuzione di questo codice ottengo un java.lang.NullPointerException. È possibile e corretto avviare un'attività come faccio io?

UPD Ho aggiunto

private Context mContext; 


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

inizializzare il contesto e chiamare

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

Dopo questo in postExecute

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

Ho aggiunto nuova bandiera a causa di che ho avuto in LogCat il prossimo:

* La chiamata di startActivity() dall'esterno di un contesto di attività richiede il flag FLAG_ACTIVITY_NEW_TASK. E 'davvero questo quello che vuoi? *

Ho ragione?

+2

come è stato inizializzato 'context'? – Vladimir

+0

Sembra essere, no. Come fare il contesto di inizializzazione? –

+0

vedere la risposta di dhaag23 – Vladimir

risposta

32

È necessario passare nel contesto dell'applicazione anziché in un contesto dall'attività locale. Cioè usa context.getApplicationContext() e salvalo in una variabile locale nella sottoclasse AsyncTask.

La potenza di codice simile a questa:

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

si definirebbe così:

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

Per favore, puoi aggiungere come codice? Ho aggiornato l'argomento per i dettagli. –

+0

Aggiornato con il codice. – dhaag23

+1

Su 'new MyAsyncTask (context) .execute();' Da dove viene il contesto? – dotty

16

Ho provato questo solo ora ... funziona nel metodo postExecute !!!

Intent intent_name = new Intent(); 
intent_name.setClass(getApplicationContext(),DestinationClassName.class); 
startActivity(intent_name); 
Problemi correlati