Comment puis-je passer d'un contexte à un AsyncTask?
Je veux préforme un Toast
lorsqu'une tâche d'arrière-plan est terminé, juste pour laisser l'utilisateur de savoir que c'est fini.
J'ai fait une nouvelle classe pour mon asyncTask, mais je ne peux pas utiliser getApplicationContext()
sein de cette classe.
Je suis en utilisant task.execute(getTempFile(this), getApplicationContext());
pour exécuter les tâches. getTempFile retourne un objet de Fichier, et j'ai essayé de passer le contexte comme un objet de Contexte.
Ma Tâche de classe a 3 variables AsyncTask<Object, Integer, Integer>
de sorte que le contexte est dans le deuxième objet. Cependant, cette panne de 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();
}
}
- Merci de poster votre classe AsyncTask et le squelette de votre classe principale 🙂
- Mise à jour de ma question avec un exemple de code.
Vous devez vous connecter pour publier un commentaire.
Passer un
Context
objet dans leAsyncTask
s'constructeur.Exemple de code:
et puis, lorsque vous construisez votre
AsyncTask
:Toast
doit être indiqué lorsque vous appelezshow()
sur elle dans les fonctions qui s'exécute sur le thread de l'INTERFACE utilisateur. Êtes-vous sûr que c'est le cas?Toast
s dans mononPostExecute()
méthode. Je soupçonne que vous faites quelque chose de mal.onPostExecute()
méthode deString
àInteger
puisque c'est le type de l'objet de votreonPostExecute()
attend. Pour l'ensemble de votre classe actuelle savez, leonPostExecute()
méthode est juste comme une méthode ordinaire qui actuellement n'a rien en rapport avec votreAsyncTask
.Passer dans le constructeur, non pas comme un paramètre d'une méthode. Ensuite, vous n'avez pas besoin de dépendre des paramètres génériques.
Exemple complet: Réutilisable AsyncTask
Vous dire que votre contexte est dans le deuxième objet, mais votre deuxième objet est de type Entier. Cela pourrait-il être votre problème? Aussi une autre suggestion est de mettre votre classe AsyncTask privé intérieur de la classe à votre activité - de cette façon, je suis sûr que vous aurez accès à getcontexteapplication().