Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do i pass a context to an AsyncTask?

Tags:

I want to preform a Toast when a background task is completed, just to let the user know that it's finished.

I've made a new class for my asyncTask but i cannot use getApplicationContext() within this class.

I'm using task.execute(getTempFile(this), getApplicationContext()); to run the tasks. getTempFile returns a File object, and i was trying to pass the context as a Context object.

My Task class has 3 variables AsyncTask<Object, Integer, Integer> so the context is in the second object. However, this crashes the application.

Edit

public class LocationActivity extends Activity implements LocationListener {     protected void handleImage(Bitmap thumbnail){         PushDataToServer task = new PushDataToServer();         task.execute(getTempFile(this), getApplicationContext());     } }     public class PushDataToServer extends AsyncTask<Object, Integer, Integer> {      Context context;      @Override     protected Integer doInBackground(Object... params) {         // TODO Auto-generated method stub         this.context = (Context) params[1];         File file = (File) params[0];         return null;     }      protected void onPostExecute(String result) {             Toast toast = Toast.makeText(this.context, "All done!", Toast.LENGTH_SHORT);          toast.show();     }  } 
like image 338
dotty Avatar asked Aug 15 '11 14:08

dotty


People also ask

What are the steps of AsyncTask?

An asynchronous task is defined by 3 generic types, called Params , Progress and Result , and 4 steps, called onPreExecute , doInBackground , onProgressUpdate and onPostExecute .

How do I use AsyncTask?

Android AsyncTask going to do background operation on background thread and update on main thread. In android we cant directly touch background thread to main thread in android development. asynctask help us to make communication between background thread to main thread.


2 Answers

Pass a Context object into the AsyncTask's constructor.

Sample code:

public class MyTask extends AsyncTask<?, ? ,?> {     private Context mContext;      public MyTask(Context context) {         mContext = context;     }  } 

and then, when you are constructing your AsyncTask:

MyTask task = new MyTask(this); task.execute(...); 
like image 124
Wroclai Avatar answered Oct 05 '22 03:10

Wroclai


Pass it in the constructor, not as a method parameter. Then you don't need to depend on the generic parameters.

like image 37
Nikolay Elenkov Avatar answered Oct 05 '22 05:10

Nikolay Elenkov