7
votes

Comment retourner la valeur de la tâche ASYNC dans Android

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? xxx


3 commentaires

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


4 Réponses :


3
votes

Il y a deux façons que je puisse suggérer -

  1. onpostexecute (résultat) dans asyncccttack . Voir http://developer.android.com/reference/andrroid /os/asynccTask.html#onpostexecute(Result)

  2. Envoyez une diffusion avec le résultat comme un supplément.

    asyncaptask 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 () J'aime régler la valeur sur TextView ou envoyer une diffusion de sorte que certains autres auditeur puissent gérer le résultat.


1 commentaires

Un petit point: ̶ si vous avez accès ̶ Affichage s à partir de ̶ o̶n̶P̶o̶s̶t̶E̶x̶e̶c̶u̶t̶e̶ (̶) ̶ ̶ (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̶ (̶.̶.̶) ̶ ; ̶ - Oubliez-le, Onpostexecute () est invoqué sur le fil de l'interface utilisateur.



0
votes

Lorsqu'une tâche asynchrone est exécutée, la tâche passe 4 étapes:

  1. 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.

  2. 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 ...).

  3. 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.

  4. 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.

    Utilisez un gestionnaire

    dans votre activité xxx


0 commentaires

1
votes

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> xxx pré>

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
    }
};


0 commentaires