Friday, 29 November 2013

Finish the Activity After AsyncTask Completed in Android

Methode 1:

As AsyncTaskActivity is in separate file than LoginActivity, you cant finish LoginActivity by: Login.this.finish();
Instead you should pass the Activity Reference as parameter in the AsyncTaskActivity Class, like you can define following constructor:

private class AsyncTaskActivity extends AsyncTask<String, Void, String> {
Activity mActivity;
    public AsyncTaskActivity(Activity activity)    {
                 super();
         this.mActivity=activity;
    }
}
and whenever you want to finish the activity call
this.mActivity.finish();

Create AsyncTaskActivity's Object in LoginActivity by 
AsyncTaskActivity asynTask = new AsyncTaskActivity(LoginActivity.this);


Methode 2:

What you can try to do instead of calling context.finish(), why don't you do a callback interface like this:

public interface TaskCallback{
void done();
}

Then you implement this into your Activity

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();
}

}

And instead of having Context as a parameter you have 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();

}

There you go, it gives you more flexibility to custom each implementation.



No comments:

Post a Comment