executing runOnUiThread on a separate class
android, java
Solution
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).
Problem
Possible Duplicate: Android how to runOnUiThread in other class? My Asyn Classes are a separate class file. ``` public class AdamTask extends AsyncTask<String, Void, String>{ public void showToast(final String toast) { runOnUiThread(new Runnable() { public void run() { Toast.makeText(context, toast, Toast.LENGTH_SHORT).show(); } }); } } ``` How would I execute this method in my AsyncTask Class? I am getting an error The method `runOnUiThread(new Runnable(){}) is undefined for the type AdamTask` new AdamTask(Eve.this, `How to pass the eve activity here`).execute();