2012-02-02 13 views
13

Tengo una AsyncTask, que llena una Lista personalizada con datos analizados de Internet.¿Cómo iniciar correctamente la actividad desde PostExecute en Android?

En PostExecute llené esa lista y la preparo para transferirla a una nueva actividad.

lo hago de esta manera:

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

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


} 

donde el contexto

private Context context; 

En LogCat después de ejecutar este código consigo un java.lang.NullPointerException. ¿Es esto posible y correcto comenzar una actividad como lo hago?

UPD He añadido

private Context mContext; 


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

inicializar el contexto y llamar

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

Después de esto en PostExecute

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

añadí nueva bandera debido a que tengo en LogCat el siguiente:

* Llamar a startActivity() desde fuera del contexto de una actividad requiere el indicador FLAG_ACTIVITY_NEW_TASK. ¿Es esto realmente lo que quieres? *

¿Estoy en lo cierto?

+2

cómo ha inicializado 'context'? – Vladimir

+0

Parece ser, no. ¿Cómo hacer inicializar el contexto? –

+0

ver la respuesta de dhaag23 – Vladimir

Respuesta

32

Debe pasar el contexto de la aplicación en lugar de un contexto de la actividad local. Es decir. use context.getApplicationContext() y guárdelo en una variable local en su clase de servidor AsyncTask.

El poder de código es como la siguiente:

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

que se dice así:

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

Por favor, ¿puedes agregar el código come cómo hacerlo? He actualizado el tema para más detalles. –

+0

Actualizado con el código. – dhaag23

+1

En 'new MyAsyncTask (context) .execute();' ¿de dónde viene el contexto? – dotty

16

probé este momento ... que trabaja en PostExecute Método !!!

Intent intent_name = new Intent(); 
intent_name.setClass(getApplicationContext(),DestinationClassName.class); 
startActivity(intent_name); 
Cuestiones relacionadas