Je souhaite effectuer une Toast
quand une tâche en arrière-plan est terminée, histoire de faire savoir à l'utilisateur qu'elle est terminée.
J'ai créé une nouvelle classe pour ma tâche async, mais je ne peux pas utiliser getApplicationContext()
dans cette classe.
J'utilise task.execute(getTempFile(this), getApplicationContext());
pour exécuter les tâches. getTempFile renvoie un objet File et j'essayais de passer le contexte en tant qu'objet Context.
Ma classe de tâches a 3 variables AsyncTask<Object, Integer, Integer>
donc le contexte est dans le deuxième objet. Cependant, cela bloque l'application.
Modifier
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();
}
}
Passez un objet Context
dans le constructeur de AsyncTask
.
Exemple de code:
public class MyTask extends AsyncTask<?, ? ,?> {
private Context mContext;
public MyTask(Context context) {
mContext = context;
}
}
et ensuite, lorsque vous construisez votre AsyncTask
:
MyTask task = new MyTask(this);
task.execute(...);
Transmettez-le dans le constructeur, pas en tant que paramètre de méthode. Ensuite, vous n'avez pas besoin de dépendre des paramètres génériques.
Exemple complet: AsyncTask réutilisable
Vous dites que votre contexte est dans le deuxième objet, alors que votre deuxième objet est Integer. Cela pourrait-il être votre problème? En outre, une autre suggestion consiste à placer votre classe AsyncTask en tant que classe interne privée à votre activité. Ainsi, je suis sûr que vous aurez accès à getApplicationContext ().