首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在安卓系统中正确地从PostExecute启动活动?

如何在安卓系统中正确地从PostExecute启动活动?
EN

Stack Overflow用户
提问于 2012-02-03 02:41:02
回答 3查看 37K关注 0票数 22

我有一个AsyncTask,它用来自互联网的解析数据填充一个自定义列表。

在PostExecute中,我填充该列表,并准备将其转移到新活动中。

我这样做:

代码语言:javascript
复制
@Override
protected void onPostExecute(List<VideoDataDescription> result) 
{
    super.onPostExecute(result);
    MainActivity.progressDialog.dismiss();

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


}

where上下文

代码语言:javascript
复制
    private Context context;

在LogCat中,执行完这段代码后,我得到了一个Java.lang.NullPointerException。在我这样做的时候启动一个活动是可能的并且是正确的吗?

我已经添加了更新

代码语言:javascript
复制
    private Context mContext;


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

初始化上下文并调用

代码语言:javascript
复制
YoutubeAndYahooParser youtubeAndYahooParser = new YoutubeAndYahooParser(ResultsQueryActivity.this);
                    youtubeAndYahooParser.execute("my string to pass in asynctak");

在此之后在PostExecute中

代码语言:javascript
复制
Intent intent = new Intent(mContext, ResultsQueryActivity.class);
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 mContext.startActivity(intent);    

我添加了新的标志,因为我在接下来的LogCat中得到了:

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

我说的对吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-03 03:03:36

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

代码可能如下所示:

代码语言:javascript
复制
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));
    }
}

你可以这样称呼它:

代码语言:javascript
复制
   new MyAsyncTask(context).execute();
票数 44
EN

Stack Overflow用户

发布于 2013-03-16 20:25:58

我刚才试过了..。它可以在PostExecute方法中工作!

代码语言:javascript
复制
Intent intent_name = new Intent();
intent_name.setClass(getApplicationContext(),DestinationClassName.class);
startActivity(intent_name);
票数 18
EN

Stack Overflow用户

发布于 2018-06-27 03:39:59

但是,如果您基于从先前活动中获得的响应(结果)开始一个新的意图,则会更好。

这将消除调用新意图时出现错误响应的可能性。

例如,如果前一个活动应该成功返回...或者欢迎允许新的意图开始,我可以这样检查它

代码语言:javascript
复制
  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();
       }

    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9118015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档