IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

AsyncTask et pointeur sur fonction


Sujet :

Android

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 51
    Points : 42
    Points
    42
    Par défaut AsyncTask et pointeur sur fonction
    Bonjour,

    Je viens de finir ma première application pour android, je la teste sur android 2.3, aucun problème.
    Mais lorsque je l'ai testé sur android 3.0 la j'ai eu des exceptions liées au fait que je fait des requêtes http dans mon thread principal, typique du débutant semble t'il ...

    Donc ayant compris que ce n'etait pas correct, je passe donc par une AsyncTask, mais j'ai plein de requêtes avec plein de resultats differents dans plein d'activité, je suppose donc qu'il est possible de faire une nouvelle classe java contenant une AsyncTask à laquelle je passerai en paramètre la requete à faire, et un pointeur sur la fonction à executer à la fin du traitement.

    Mais je n'arrive pas a créér ce dit pointeur, pourrriez-vous m'aider ?
    Il faut aussi que je pense à detruire(via cancel) mes AsyncTask lors du Onpause de mes activités.

    Merci de votre aide,

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    ASyncTask est justement là pour ca...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    new ASyncTask<A, T, P>() {
       @Override
       public A doInBackground(T ... params)
       {
            ... sera executé dans le thread de la task ...
        }
     
       @Override
       public void onPostExecute(A result)
       {
           ... sera executé dans le thread principal ...
       }
     
    }
    Nul besoin de conserver un pointeur sur la task en général, quand celle-ci se termine, elle est "collectable" directement sans avoir à la détruire explicitement.
    Comme c'est une classe "locale", l'activité qui la crée peut directement etre accessible .... par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    class MyActivity extends Activity
    {
         HttpClient   httpClient;
     
        @Override
        public void onCreate(Bundle savedState)
        {
              ....
              new AsyncTask<...>() {
                   @Override
                    public A  doInBackground() {
                       synchronized (MyActivity.this.httpClient) {
                             // use MyActivity.this.httpClient 
                       }
                    }
                    @Override
                    public void onPostExecute(A a) {
                         MyActivity.this.onHttpResult(a);
                    }
               }.execute();
         }
     
         public void onHttpResult(A a) {
              // utiliser 'a' dans le thread principal
         }
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 51
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    Je ne veux pas avoir a créer autant d'asynctask que j'ai activité, plein de portion de code inutile, maintenance lourde etc.

    Il me semblait logique que l'on puisse créer un .java avec notre asynctask et qu'ensuite on l'appelle dans chacune de nos thread avec des parametres dont la fameuse fonction gérant le retour d'asynctask.

    Merci,

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Bien sur, rien ne t'empeche d'avoir une spécialisation de AsyncTask pour faire les requetes Http ... mais au bout du compte il faudra bien que le onPostExecute rappelle l'UI, et rien ne vaut un classe anonyme locale pour cela....

    Grosso merdo:
    * Solution 1 (AsyncTask anonyme locale):

    Définition d'une classe HttpTask (AsyncTask)
    Dans les activity: new HttpTask() { onPostExecute() { sendToUI(); } }.execute(params);

    * Solution 2 (AsyncTask non locale):

    Définition d'une classe HttpTask (AsyncTask)
    Définition d'une interface HttpCallback
    Dans les activity: new HttpTask().setOnResult(this).execute(params);
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Réponses: 10
    Dernier message: 03/02/2005, 13h09
  2. Réponses: 5
    Dernier message: 12/01/2005, 20h58
  3. pointeurs sur fonction en C++
    Par cemoi dans le forum C++
    Réponses: 7
    Dernier message: 29/11/2004, 13h19
  4. [langage] Pointeur sur fonction
    Par Fanch.g dans le forum Langage
    Réponses: 2
    Dernier message: 02/10/2004, 10h43
  5. Declaration de fonction retournant un pointeur sur fonction
    Par pseudokifaitladifférence dans le forum C
    Réponses: 5
    Dernier message: 11/08/2003, 19h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo