J'ai créé une tâche ASYNC pour appeler mon serveur pour obtenir des données de DB.
J'ai besoin de traiter le résultat renvoyé de l'appel de serveur HTTP.
De mon activité, j'appelle la tâche ASYNC dans de nombreux endroits. Donc, je ne peux pas utiliser la variable des membres pour accéder au résultat. Y a-t-il un moyen de faire?
4 Réponses :
Il y a deux façons que je puisse suggérer - p>
Envoyez une diffusion avec le résultat comme un supplément. p> li>
ol>
onpostexecute (résultat) code> dans
asyncccttack code>. Voir http://developer.android.com/reference/andrroid /os/asynccTask.html#onpostexecute(Result) p> li>
asyncaptask code> est une tâche asynchrone afin de ne pas avoir de sens de renvoyer le résultat à l'appelant. Plutôt gérer le résultat dans
Onpostexecute () Code> J'aime régler la valeur sur
TextView code> ou envoyer une diffusion de sorte que certains autres auditeur puissent gérer le résultat. P>
Un petit point: ̶ si vous avez accès ̶ Affichage code> s à partir de ̶
o̶n̶P̶o̶s̶t̶E̶x̶e̶c̶u̶t̶e̶ (̶) ̶ code> ̶ (par exemple un autre thread) ̶, ̶ faire à l'intérieur
a̶c̶t̶i̶v̶i̶t̶y̶.̶r̶u̶n̶o̶n̶u̶i̶t̶o̶n̶u̶i̶t̶h̶r̶̶u̶̶t̶h̶r̶e̶a̶d̶ (̶.̶.̶) ̶ Code>; ̶ - Oubliez-le,
Onpostexecute () code> est invoqué sur le fil de l'interface utilisateur.
Lorsqu'une tâche asynchrone est exécutée, la tâche passe 4 étapes:
Onpreexecute (), invoqué sur le fil de l'interface utilisateur avant que la tâche soit exécutée. Cette étape est normalement utilisée pour configurer la tâche, par exemple en affichant une barre de progression dans l'interface utilisateur. P> LI>
doIndbackground (paramètres ...), invoqué sur le fil d'arrière-plan immédiatement après l'exécution des finitions () exécutant. Cette étape est utilisée pour effectuer un calcul de fond qui peut prendre beaucoup de temps. Les paramètres de la tâche asynchrone sont passés à cette étape. Le résultat du calcul doit être renvoyé par cette étape et sera transmis à la dernière étape. Cette étape peut également utiliser PublishProgress (progrès ...) pour publier une ou plusieurs unités de progrès. Ces valeurs sont publiées sur le thread d'interface utilisateur, dans l'étape ONPROGROGRESSUPDATE (progrès ...). P> LI>
ONPROGRESSUPDATE (progrès ...), invoqué sur le thread de l'interface utilisateur après un appel à publierProgress (progrès ...). Le calendrier de l'exécution est indéfini. Cette méthode est utilisée pour afficher toute forme de progression dans l'interface utilisateur, tandis que le calcul d'arrière-plan est toujours en cours d'exécution. Par exemple, il peut être utilisé pour animer une barre de progression ou montrer des journaux dans un champ de texte. P> li>
Onpostexecute (résultat), appelé sur le thread de l'interface utilisateur après la fin de la finition de l'arrière-plan. Le résultat du calcul de l'arrière-plan est transmis à cette étape sous forme de paramètre. Strong> p> li>
ol> Utilisez un gestionnaire p> dans votre activité p>
Voici comment je me suis avéré:
1) Créer une classe d'interface qui définit une signature pour une méthode d'exécution à la fin: p> 2) définissez un Propriété de votre classe AsyncCTâche pour tenir la méthode de déléguée: P> task.completionCode = new AsyncIfc() {
@Override
public void onComplete() {
// Any logic you want to happen after execution
}
};
Essayez d'appeler la méthode Get () d'asyncaptage après avoir appelé la méthode exécutée (). Cela fonctionne pour moi
Pourquoi ne pas appeler une méthode qui gère la valeur indiquée dans Stackoverflow.com/a/9458274/1021640 ?
peut-être dupliquer de async et
Le bon moyen utilise Protocoles