繁体   English   中英

AsyncTask完成时完成呼叫活动

[英]Finish the calling activity when AsyncTask completes

我的通话活动:

public class Hello extends Activity {  

public void onCreate(Bundle savedInstanceState) {

    MyTask mt = new MyTask(this);
    mt.execute();
}

现在在MyTask中(一个外部类):

public class MyTask extends AsyncTask<Void, Void, Void> {
private Context mContext;

public MyTask(Context context) {

    mContext = context;
}  

//doinbackground, etc

    protected void onPostExecute() {
    mContext.finish();

}

如果删除上面的mContext.finish() ,其他事情将按预期工作。
但是,如果我调用mContext.finish()mContext.finish()收到一个错误: The method finish() is undefined for the type Context (当我编写mContext时,Eclipse不显示finish()。这表明我在错误地使用finish()。)

什么我需要做什么来完成呼叫活动HelloMyTask完成任务

((Activity)mContext).finish();

Context转换为Activity并调用其finish()方法的正确方法。 不确定为什么要通过AsyncTask完成Activity

您可以尝试做什么而不是调用context.finish(),为什么不这样做这样的回调接口:

public interface TaskCallback{
void done();
}

然后将其实现到您的活动中

public Hello extends Activity implements TaskCallback{

    .....BUNCH OF ACTIVITY CODE.....

public void onCreate(Bundle savedInstanceState) {

    MyTask mt = new MyTask(this);
    mt.execute();
}

public void done() {
     finish();
}

}

而不是使用Context作为参数,而是使用TaskCallback

public class MyTask extends AsyncTask<Void, Void, Void> {
private TaskCallback mCallback;

public MyTask(TaskCallback callback) {

    mCallback = callback;
}  

//doinbackground, etc

    protected void onPostExecute() {
    mCallback.done();

}

到此为止,它为您自定义每个实现提供了更大的灵活性。

我遇到相同的情况,然后执行以下操作:

public class MyTask extends AsyncTask<Void, Void, Void> {
private Activity mActivity;
private Context mContext;

public MyTask(Activity activity) {
    mActivity = activity;
    mContext = mActivity.getApplicationContext();
}  

//doinbackground, etc

protected void onPostExecute() {
    mActivity.finish();

}

希望对您有所帮助:)

在活动类中定义一个方法,如下所示:

public void FinishAfterAsyncTask()
{
   this.finish();
}

并从AsynTask类的OnPostExecute方法中调用此方法。

您可以创建一个新的私有AsyncTask,它是从您的公共AsyncTask扩展而来的。

在这个私有的AsyncTask中,您可以访问Activity东西,并且可以重写onPostExecute方法来完成它。

您真正的AsyncTask

public class MyPublicAsyncTask extends AsyncTask<Void, Void, Void> {
    Context context;
    public GetHorariosAsyncTask(Context ctx){
        context = ctx;
    }
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // prepare yourself for an async work
    }
    @Override
    protected Void doInBackground(Void... params) {
        // Do yout cool async stuff
    }
    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
       // you're finish, let's tell to user
    }
}

您的私人AsyncTask活动

public class MyActivity  extends Activity {
    Activity mAct;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        mAct = this;
    }

    private class MyPrivateAsyncTask extends MyPublicAsyncTask {

        public MyPrivateAsyncTask(Context ctx) {
            super(ctx);
            // TODO Auto-generated constructor stub
        }

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            // our async task is completed! let's take care of this activity
            mAct.finish();
        }

    }
}

你能试一下吗

this.finish()

似乎喜欢它,是因为使用未定义的mContext调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM