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 :

Effectuer des calculs après l'ouverture d'une activity


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut Effectuer des calculs après l'ouverture d'une activity
    Bonjour, je reviens vers vous car je me heurte à un autre problème.

    Une autre fonction de mon application est de se connecter à une page web pour télécharger des informations, puis mettre à jour les 8 bases SQLite du téléphone.
    Cela fonctionne bien, mais sur en dehors du simulateur, c'est un peu plus long.

    Ce n'est pas non plus énorme, 5/6 secondes, mais j'aimerais éviter de faire "peur" à l'utilisateur.
    Je souhaitais donc ajouter des informations dans le textview en temps réel, lorsque la connexion est établie puis à chaque mise à jour des tables.

    Malheureusement, l'application effectue tout le calcul et affiche tout d'un bloc à la fin.
    Pire, lorsque je clique sur le bouton "MAJ" qui ouvre l'activity (et donc autre vue) pour la mise à jour, l'écran reste comme figé (l'application attends d'avoir tout terminé avant de switcher vers l'autre vue).

    J'ai donc essayé de "jouer" avec le cycle de vie de l'application, mais sans succès.
    http://www.mti.epita.fr/blogs/wp-con...lifecycle1.png


    Avez-vous une idée à me conseiller ?


    [EDIT] Je viens de penser aux threads, pensez-vous que cela soit possible avec un thread ? Peut-être y a-t-il tout de même une autre solution évidente ?

  2. #2
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Citation Envoyé par gilloddon Voir le message
    Je viens de penser aux threads, pensez-vous que cela soit possible avec un thread ? Peut-être y a-t-il tout de même une autre solution évidente ?
    C'est même une nécessité (diapo n°3, page 20 : http://olegoaer.perso.univ-pau.fr/courses/MOBILE.pdf).
    Penses aussi aux "progress bar" pour que l'utilisateur ne s'impatiente pas

  3. #3
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Si tu peux, utilises plutôt une AsyncTask.
    Sa méthode doInBackground est exécuté dans un thread séparé, mais les méthodes onProgress, onPreExecute et onPostExecute sans géré par l'EDT.
    Ainsi, tu peux facilement gérer et les tâches et les MaJ.
    À utilise en combo avec un ProgressDialog en mode spinner

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    Oui, en regardant le pdf (traitant pas mal de point, merci pour le lien), j'ai aussi pensé qu'une AsyncTask serait mieux.
    Merci donc pour vos réponses, je vais essayer de mettre en place tout ça, avec la progressbar (j'ai trouvé un tutoriel pour ça, je vais voir ce que ça donne). Je vous tiendrais au courant.

    Par contre, qu'entends tu par "ProgressDialog en mode spinner" ?

    -----------------------

    Sinon, j'ai une autre question, mais j'ouvrirais un sujet différent si nécessaire.
    Est-ce qu'il est possible d'ajouter dynamiquement des zones de texte et des boutons sur une vue ?

    Je m'explique rapidement. Disons que j'ai un tableau d'objet.
    Il faudrait que pour chaque objet, j'affiche son nom et à côté, un bouton -> nécessaire d'ajouter une zone de texte et d'y attribuer un texte.
    De même, pour chaque objet, il faudrait surtout ajouter un bouton et avoir un listenner dessus pour savoir sur quel bouton l'utilisateur a appuyé, et effectuer une action différente selon le bouton.

    Vu que la taille peut varier à chaque fois, c'est donc forcément dynamique, ce qui ajoute la petite pointe de difficulté.
    Je ne sais pas si c'est possible, vu que l'on doit aussi déclarer les boutons dans le xml layout.

    (Petit schéma)

  5. #5
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Citation Envoyé par gilloddon Voir le message
    Par contre, qu'entends tu par "ProgressDialog en mode spinner" ?
    Il voulais simplement faire référence à l'esthétique et l'animation de la barre de progression ("spinning wheel" ou "horizontal bar"). Le spinning wheel est surtout utile lorsque l'on ne connaît pas le temps qu'une tâche prendra.

    Citation Envoyé par gilloddon Voir le message
    Sinon, j'ai une autre question, mais j'ouvrirais un sujet différent si nécessaire.
    Est-ce qu'il est possible d'ajouter dynamiquement des zones de texte et des boutons sur une vue ?
    oui

  6. #6
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Citation Envoyé par Hephaistos007
    Il voulais simplement faire référence à l'esthétique et l'animation de la barre de progression ("spinning wheel" ou "horizontal bar"). Le spinning wheel est surtout utile lorsque l'on ne connaît pas le temps qu'une tâche prendra.
    Oui, simplement

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    D'accord, je vais voir ça alors.
    C'est vrai qu'une "barre de chargement" serait plus précise. Faut que je vois si ça diffère pas trop du tutoriel que j'ai trouvé. Je n'ai en fait jamais utilisé ni l'un ni l'autre.

    -----

    Sinon, pour les boutons/zone de texte dynamique, j'ai peut-être une piste.

    Est-ce une bonne solution dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    LinearLayout l = (LinearLayout ) findViewById(R.id.l);
     
    Button monButton = new Button(nomActivity);
    monButton.setWidth("truc");
    monButton.setHeight("machin");
    ...
    l.addView(MonButton);
    ...
    [Edit] Ah non, je peux pas récupérer le layout en fait.
    Il faudrait plutôt récupérer R.layout.nomDuXML de la vue ?

  8. #8
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Tu peux récupérer le layout par findViewById si tu as pris le soin de donner un id à ton layout (logique !)
    Sinon, la meilleure façon de le récupérer reste encore de passer par un LayoutInflater.

  9. #9
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    J'y pense, il y a carrément un tuto dédié à cette question sur dvp : http://mathias-seguy.developpez.com/...ihm-dynamique/

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    Alors, pour l'AsyncTask, ça y est, tout est en place.
    Une fois pris en main, c'est vraiment pratique.

    Je vais voir pour la vue dynamique maintenant.
    Si j'ai un problème, je ferais un autre sujet pour ne pas tout mélanger.

    Merci pour vos réponses !

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

Discussions similaires

  1. Repérer le titre d'une colonne pour effectuer des calculs
    Par Doriansticle dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/02/2013, 15h14
  2. Effectuer des calcul automatiquement d'une table à une autre
    Par yankd dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 13/09/2012, 15h54
  3. Réponses: 7
    Dernier message: 30/05/2012, 14h36
  4. [AC-2010] Effectuer des calculs avec des dates issues d'une requête
    Par nianiania dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 03/04/2012, 20h51
  5. Réponses: 7
    Dernier message: 07/03/2007, 14h14

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