You need to have the Activity's
reference (lets name it activity
) and pass it to your AsyncTask
class. Then you can call runOnUiThread
like this:
activity.runOnUiThread
The runOnUiThread is a method defined in Activity
class.
Just add a contsructor to your AsyncTask. Your AsyncTask will look like this:
public class AdamTask extends AsyncTask<String, Void, String> {
private Activity activity; //activity is defined as a global variable in your AsyncTask
public AdamTask(Activity activity) {
this.activity = activity;
}
public void showToast(final String toast)
{
activity.runOnUiThread(new Runnable() {
public void run()
{
Toast.makeText(activity, toast, Toast.LENGTH_SHORT).show();
}
});
}
...
}
Then to call the AsyncTask
you need something like this:
AdamTask adamTask = new AdamTask(Eve.this);
adamTask.excecute(yourParams);
UPDATE As Sam mentioned in the comments, AsyncTasks
may result in context
leaking when configuration changes occur (one example is when screen rotates and the Activity
is recreated). A way to deal with this is the headless fragment technique.
Another way, more efficient, is using an event bus. See here for more information (link provided by Sam in the comments).