我有一个AsyncTask,它用来自互联网的解析数据填充一个自定义列表。
在PostExecute中,我填充该列表,并准备将其转移到新活动中。
我这样做:
@Override
protected void onPostExecute(List<VideoDataDescription> result)
{
super.onPostExecute(result);
MainActivity.progressDialog.dismiss();
context.startActivity(new Intent(context, ResultsQueryActivity.class));
}
where上下文
private Context context;
在LogCat中,执行完这段代码后,我得到了一个Java.lang.NullPointerException。在我这样做的时候启动一个活动是可能的并且是正确的吗?
我已经添加了更新
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中得到了:
*从活动上下文外部调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗*
我说的对吗?
发布于 2012-02-03 03:03:36
您应该传入应用程序上下文,而不是来自本地活动的上下文。例如,使用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();
发布于 2013-03-16 20:25:58
我刚才试过了..。它可以在PostExecute方法中工作!
Intent intent_name = new Intent();
intent_name.setClass(getApplicationContext(),DestinationClassName.class);
startActivity(intent_name);
发布于 2018-06-27 03:39:59
但是,如果您基于从先前活动中获得的响应(结果)开始一个新的意图,则会更好。
这将消除调用新意图时出现错误响应的可能性。
例如,如果前一个活动应该成功返回...或者欢迎允许新的意图开始,我可以这样检查它
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();
}
}
https://stackoverflow.com/questions/9118015
复制相似问题