0

我有一项任务执行方法 doInBackground 并返回一个布尔值。我想要的是启动一个新的 Intent 但方法 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
            }
        }
        }
4

5 回答 5

3

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

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));
        }
    }
}
于 2013-03-21T21:09:07.717 回答
2

关于之前回复的备注:请记住不要泄露您的活动。使用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));
        }
    }
}
于 2013-03-21T21:38:19.173 回答
1

您需要使用对产生它的活动或上下文的引用来创建任务。

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

    public LoginTask(Activity activity){
        this.mActivity = mActivity;
    }

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

         boolean sucess;

         //do some stuff

         return sucess;
    }

    @Override
    protected void onPostExecute(Boolean result) {
        if (result) {
            mActivity.startActivity(new Intent(mContext, MainViewActivity.class));
        }
    }
}
于 2013-03-21T21:12:21.477 回答
0

您确定 startActivity 不可用吗?我刚刚对其进行了测试,它对我来说很好用。

我认为你应该替换你的行中的this,因为 this 不是指 Activity,它指的是 ASyncTask。

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

那应该行得通。

于 2013-03-21T21:11:01.183 回答
0

thisonPostExecute() 内部指的是 AsyncTask 类实例。改用YourActivityName.this

startActivity(new Intent(ParentActivity.this, MainViewActivity.class));
于 2013-03-21T21:11:57.917 回答