0

メソッドdoInBackgroundを実行し、ブール値を返すタスクが1つあります。私が欲しいのは新しいインテントを開始することですが、メソッド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 を開始するアクティビティを渡します

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

this内部 onPostExecute() は、AsyncTask クラス インスタンスを参照します。YourActivityName.this代わりに使用してください:

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