我有一个 AsyncTask,它用来自互联网的解析数据填充自定义列表。
在 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");
之后在执行后
Intent intent = new Intent(mContext, ResultsQueryActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
我添加了新标志,因为我已进入 LogCat:
*从 Activity 上下文外部调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志。这真的是你想要的吗?*
我对吗?
您应该传入应用程序上下文而不是本地活动的上下文。 IE。使用 context.getApplicationContext() 并将其保存在 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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)