¿Cómo iniciar correctamente la actividad desde PostExecute en Android?

Tengo una AsyncTask, que llena una Lista personalizada con datos analizados de Internet.

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

Lo hago de esta manera:

@Override protected void onPostExecute(List 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, obtengo una Java.lang.NullPointerException. ¿Es esto posible y correcto comenzar una Actividad como lo hago?

UPD he agregado

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

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

Agregué una nueva bandera porque al día siguiente obtuve LogCat:

* 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?

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 AsyncTask.

El código podría ser algo como esto:

 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 result) { super.onPostExecute(result); MainActivity.progressDialog.dismiss(); context.startActivity(new Intent(context, ResultsQueryActivity.class)); } } 

lo llamarías así:

  new MyAsyncTask(context).execute(); 

Intenté esto ahora … ¡funciona en el método PostExecute !!!

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

Pero es mejor si comienza un nuevo bash basado en la respuesta (resultado) obtenido de las actividades anteriores.

Esto eliminará la posibilidad de que la respuesta de error invoque la nueva intención.

Ejemplo si se suponía que la actividad anterior debía regresar con éxito … o Bienvenida para permitir que se iniciara el nuevo bash, podría verificarlo de esta manera

  protected void onPostExecute(String result) { if (result.equals("Succesfully...")){ context.startActivity(new Intent(context, Login_Activity.class)); Toast.makeText(context, result, Toast.LENGTH_LONG).show(); }else if (result.contains("Welcome")){ context.startActivity(new Intent(context, MainActivity.class)); }else { Toast.makeText(context,result,Toast.LENGTH_LONG).show(); } }