Skip to content Skip to sidebar Skip to footer

How To Call Activity Method In An Asynctask

I would like to call an Activity method after the onPostExecute of my AsyncTask. Do you know how I can do that? I want to call in the sendSMS(String phoneNumber, String message) me

Solution 1:

One way is to pass an instance of the Activity through PostTask constructor, something like:

privateclassPostTaskextendsAsyncTask<String, Integer, String>
{
    private AsyncBigCalculActivity activity;

    publicPostTask(AsyncBigCalculActivity activity)
    {
        this.activity = activity;
    }

    // ...
}

and on creating the PostTask instance, pass the activity instance:

new PostTask(this).execute();

Now you can invoke sendSMS() from within PostTask, like:

activty.sendSMS(...);

Also note that if you are defining the PostTask as a private class inside the activty, then you can invoke sendSMS() like:

AsyncBigCalculActivity.this.sendSMS(...);

Solution 2:

Add a constructor and a global variable to your AsyncTask like this:

AsyncBigCalculActivity mActivity;

publicPostTask(AsyncBigCalculActivity a){
    mActivity = a;
}

Then simply use mActivity.sendSMS("test", "test") when you need it.

However, you should really have methods like sendSMS() in a utility class.

Solution 3:

If your AsyncTask is an inner class of your Activity then you should be able to call the Activity method from your onPostExecute(). Otherwise, you can send the Context to a constructor of your AsyncTask and uses that to call the method

Solution 4:

Write a Callback

You can create a CallBack using an interface. This way you can use your AsyncTask with any activity. (Loosely coupled code)

1) Create a Callback

interfaceMyAsyncTaskCallBack{
 
   publicvoid doStuff(String arg1,String arg2);

}  

2) Initialize the callback in your AsyncTask

privateclassMyTaskextendsAsyncTask<String, Void, Void>
{
     private MyAsyncTaskCallBackactivity callback;

     publicMyTask(MyAsyncTaskCallBackactivity callback)
     {
          this.callback = callback;
     }

     //Call callback.doStuff(....phonenum, ....message); in your postExecute

}

3) Implement the Callback in your Activity and override doStuff() method

publicYourActivityextendsAppCompatActivityimplementsMyAsyncTaskCallBack{

      // Your Activity code // new MyTask(this).execute("phonenum","msg");    //<--- This is how you run AsyncTaskprivatevoidsendMessage(String num, String msg){

          // send msg logic
      }

     @OverridepublicvoiddoStuff(String arg1,String arg2){
         sendMessage(arg1,arg2);  // invoke activity method
     }

} 

Post a Comment for "How To Call Activity Method In An Asynctask"