Android 如何执行方法onPostExecute启动新活动

Android 如何执行方法onPostExecute启动新活动,android,android-asynctask,Android,Android Asynctask,我有一个任务执行doInBackground方法并返回一个布尔值。我想要的是启动一个新的意图,但startActivity方法不可用。我该怎么做 我的任务: public class LoginTask extends AsyncTask<String, Integer, Boolean> { @Override protected Boolean doInBackground(String... params) {

我有一个任务执行doInBackground方法并返回一个布尔值。我想要的是启动一个新的意图,但startActivity方法不可用。我该怎么做

我的任务:

        public class LoginTask extends AsyncTask<String, Integer, Boolean> {

            @Override
            protected Boolean doInBackground(String... params) {

                 boolean sucess;

                 //do some stuff

                 return sucess;
            }

    @Override
        protected void onPostExecute(Boolean result) {

            if (result) {
                //startActivity(new Intent(this, MainViewActivity.class));
                            //it doesn't find startActivity
            }
        }
        }
公共类登录任务扩展异步任务{
@凌驾
受保护的布尔doInBackground(字符串…参数){
布尔成功;
//做点什么
回归成功;
}
@凌驾
受保护的void onPostExecute(布尔结果){
如果(结果){
//startActivity(新意图(此,MainViewActivity.class));
//它找不到星体触觉
}
}
}

在构造函数中传递启动异步TAK的活动

public class LoginTask {
    private Context mCtx;

    public LoginTask(Context ctx){
        mCtx = ctx;
    }

    ....

    @Override
    protected void onPostExecute(Boolean result) {
        if (result) {
            mCtx.startActivity(new Intent(mCtx, MainViewActivity.class));
        }
    }
}

在构造函数中传递启动AsyncTak的活动

public class LoginTask {
    private Context mCtx;

    public LoginTask(Context ctx){
        mCtx = ctx;
    }

    ....

    @Override
    protected void onPostExecute(Boolean result) {
        if (result) {
            mCtx.startActivity(new Intent(mCtx, MainViewActivity.class));
        }
    }
}

您确定startActivity不可用吗?我刚刚测试过,它对我来说很好

我认为您应该替换行中的this,因为this不是指活动,而是指任务

   startActivity(new Intent(getApplicationContext(), MainViewActivity.class));

那应该行。

你确定startActivity不可用吗?我刚刚测试过,它对我来说很好

我认为您应该替换行中的this,因为this不是指活动,而是指任务

   startActivity(new Intent(getApplicationContext(), MainViewActivity.class));

这应该是可行的。

这个onPostExecute()中的
引用了AsyncTask类实例。 使用
YourActivityName。改为使用此

startActivity(new Intent(ParentActivity.this, MainViewActivity.class));

onPostExecute()中的此
引用AsyncTask类实例。 使用
YourActivityName。改为使用此

startActivity(new Intent(ParentActivity.this, MainViewActivity.class));

您需要在创建任务时引用产生该任务的活动或上下文

公共类登录任务扩展异步任务{
活动能力;
公共登录任务(活动){
this.mActivity=mActivity;
}
@凌驾
受保护的布尔doInBackground(字符串…参数){
布尔成功;
//做点什么
回归成功;
}
@凌驾
受保护的void onPostExecute(布尔结果){
如果(结果){
startActivity(新意图(mContext,MainViewActivity.class));
}
}
}

您需要创建任务,并引用产生任务的活动或上下文

公共类登录任务扩展异步任务{
活动能力;
公共登录任务(活动){
this.mActivity=mActivity;
}
@凌驾
受保护的布尔doInBackground(字符串…参数){
布尔成功;
//做点什么
回归成功;
}
@凌驾
受保护的void onPostExecute(布尔结果){
如果(结果){
startActivity(新意图(mContext,MainViewActivity.class));
}
}
}

关于先前答复的备注: 请记住不要这样做。使用
WeakReference
类:

public static class LoginTask extends AsyncTask<String, Integer, Boolean> {
    WeakReference<Activity> mActivityReference;

    public LoginTask(Activity activity){
        this.mActivityReference = new WeakReference<Activity>(activity);
    }

    @Override
    protected Boolean doInBackground(String... params) {

         boolean sucess;

         //do some stuff

         return sucess;
    }

    @Override
    protected void onPostExecute(Boolean result) {
        if (result && mActivityReference.get() != null) {
            Activity activity = mActivityReference.get();
            activity.startActivity(new Intent(activity, MainViewActivity.class));
        }
    }
}
公共静态类LoginTask扩展异步任务{
WeakReference mActivityReference;
公共登录任务(活动){
this.mActivityReference=新的WeakReference(活动);
}
@凌驾
受保护的布尔doInBackground(字符串…参数){
布尔成功;
//做点什么
回归成功;
}
@凌驾
受保护的void onPostExecute(布尔结果){
if(result&&mActivityReference.get()!=null){
Activity=mActivityReference.get();
activity.startActivity(新意图(activity,MainViewActivity.class));
}
}
}

关于先前答复的备注: 请记住不要这样做。使用
WeakReference
类:

public static class LoginTask extends AsyncTask<String, Integer, Boolean> {
    WeakReference<Activity> mActivityReference;

    public LoginTask(Activity activity){
        this.mActivityReference = new WeakReference<Activity>(activity);
    }

    @Override
    protected Boolean doInBackground(String... params) {

         boolean sucess;

         //do some stuff

         return sucess;
    }

    @Override
    protected void onPostExecute(Boolean result) {
        if (result && mActivityReference.get() != null) {
            Activity activity = mActivityReference.get();
            activity.startActivity(new Intent(activity, MainViewActivity.class));
        }
    }
}
公共静态类LoginTask扩展异步任务{
WeakReference mActivityReference;
公共登录任务(活动){
this.mActivityReference=新的WeakReference(活动);
}
@凌驾
受保护的布尔doInBackground(字符串…参数){
布尔成功;
//做点什么
回归成功;
}
@凌驾
受保护的void onPostExecute(布尔结果){
if(result&&mActivityReference.get()!=null){
Activity=mActivityReference.get();
activity.startActivity(新意图(activity,MainViewActivity.class));
}
}
}

startActivity是上下文的函数。如果他的AsyncTask不是活动的内部类,那么它就不能直接使用。但是@SimonSays的建议是可行的。startActivity是上下文的函数。如果他的AsyncTask不是活动的内部类,那么它就不能直接使用。但是@SimonSays的建议会奏效。