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 :

Utilisation d'une fenêtre indiquant un traitement


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Par défaut Utilisation d'une fenêtre indiquant un traitement
    Bonjour

    Je suis en train de récupérer des informations sur Internet : pendant ce traitement je veux afficher un fenêtre indiquant qu'il y a un traitement en cours (du type ProcessDialog) et je veux bloquer pendant ce temps là la thread principale.


    J'ai fait ce type de classe :

    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
     
    public class Internet {
     
    //...
     
    public String Execute() {
    		final ProgressDialog prd = ProgressDialog.show(ctx, "...", "...", true, false);
     
    		Traitement();
     
    		prd.dismiss();
    		return "OK";
    	}
     
    //....

    Le ProgressDialog ne s'affiche pas. Si j'enlève la ligne concerne le traitement et l'appel à la fonction "dismiss", le ProgressDialog va s'afficher dans ce cas là.

    Pourquoi ?


    Autre test : j'ai utilisé une thread que je démarre dans ma fonction "Execute": dans ce cas là, j'arrive à faire tourner le traitement avec le ProgressDialog mais par contre je sors de ma fonction "Execute" avant la fin de la thread (en fait la fonction Execute doit retourner une valeur déterminée dans le traitement de récupération => il me faut donc attendre la fin du traitement avant de retourner la valeur)


    Quelqu'un aurait-il une idée sur le sujet ?


    Merci d'avance

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Salut,

    Sans plus de code, difficile de te donner la bonne réponse, mais le cas d'erreur le plus fréquent, est que tu lance ton traitement sur le même thread que l'affichage.
    Du coup, ça pose un soucis.
    Va voir ici si tu veux plus d'informations : http://davy-leggieri.developpez.com/...oid/ui-thread/

    Et sinon pour ton problème : http://www.developpez.net/forums/d90...d/#post5298490

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Par défaut
    Salut

    En fait j'ai mis en place la classe AsyncTask pour gérer cela : cela marche bien...


    Mais il me reste un petit souci (je vais essayer d'être le plus clair possible) : j'utilise ce principe dans une classe A de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public fct () {
       Appel de mon AsyncTask 
    }
    Dans une classe B j'appelle la fonction fct de la classe A de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public Appel() {
    fct();
    ... // Suite de mon code
    }
    Dans la suite de mon code de la fonction Appel je veux utiliser le résultat que j'obtiens à la fin de l'AsyncTask . Or je passe dans la suite de mon code avant que l'AsyncTask finisse...

    Comment faire ?

    Merci d'avance

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par TsCyrille Voir le message
    Or je passe dans la suite de mon code avant que l'AsyncTask finisse...
    c'est fait pour

    pour savoir quand c'est fini, il te faut implémenter la fonction onPostExecute du asyncTask.
    Attention, normalement un asyncTask ne peut être lancé qu'une fois. Il te faut en instancier un à chaque exécution.

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Par défaut
    Mais comment renvoyer une info à la classe appelante (la classe B dans mon cas) dans la fonction onPostExecute ?

    C'est là mon problème...


    Pour info :
    - la classe A ne dérive de rien
    - la classe B dérive d'une Activity



    Merci d'avance

  6. #6
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Tu peux implémenter un mécanisme de listener par exemple.
    Ca devrais pouvoir répondre à ton besoin.

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par TsCyrille Voir le message
    Mais comment renvoyer une info à la classe appelante (la classe B dans mon cas) dans la fonction onPostExecute ?

    C'est là mon problème...


    Pour info :
    - la classe A ne dérive de rien
    - la classe B dérive d'une Activity



    Merci d'avance
    si ton asynck task est une inner class t'y as accès directement. Sinon ça dépend. la méthode des listeners (méthode utilisé par Button par exemple) est trés simple à faire.

    Sans code difficile de te donner une meilleur réponse....
    Mais les asyncTask c'est fait pour cela, et il semble qu'il évite des problèmes par rapport à l'utilisation d'un handler mais j'ai pas compris.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD9] Utilisation d'une fenêtre interne
    Par pierreaigle dans le forum WinDev
    Réponses: 6
    Dernier message: 26/01/2010, 20h04
  2. Utilisation d'une fenêtre TDialog sous windows
    Par mohira dans le forum C++Builder
    Réponses: 8
    Dernier message: 24/12/2009, 07h38
  3. [SNMP] Utilisation d'une mib privée (et traitement via perl)
    Par Tivan dans le forum Développement
    Réponses: 4
    Dernier message: 12/10/2009, 14h33
  4. Utilisation d'une fenêtre flottante
    Par ChPr dans le forum NetBeans
    Réponses: 1
    Dernier message: 08/05/2007, 10h42
  5. Réponses: 5
    Dernier message: 06/07/2005, 14h51

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