如何从Android中的PostExecute正确启动活动?

我有一个AsyncTask,它使用来自Internet的已分析数据填充自定义列表。

在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。 这是可能的和正确的开始一个活动,因为我这样做?

UPD我已经添加

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

初始化上下文和调用

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

之后在PostExecute

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

我添加了新的标志,因为我已经在下一个LogCat:

*从Activity上下文外调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。 这真的是你想要的吗?*

我对吗?

您应该传入应用程序上下文,而不是本地活动的上下文。 即使用context.getApplicationContext()并将其保存在AsyncTask子类中的局部variables中。

代码可能看起来像这样:

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

我刚才试过这个…它在PostExecute方法中工作!

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