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 :

Progress bar et asynchtask


Sujet :

Android

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 67
    Points : 46
    Points
    46
    Par défaut Progress bar et asynchtask
    Bonsoir,

    J'ai une application qui me permet de télécharger des fichiers sur le net , qui affiche la progression du dl dans une progressbar
    Je gère ce processus par un asyntask

    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
    28
    29
    30
    private class DownloadImgs extends AsyncTask<Void, String, Void> {
     
                @Override
                protected void onPreExecute() {
                    super.onPreExecute();
                    showDialog(progress_bar_type);
                }
     
     
                @Override
                protected Void doInBackground(Void ...params) {
                   for(GetCountry gc : listCountry){
               getFilesToDownload(gc.getUrl());}
     
               return null;
     
                }
     
                protected void onProgressUpdate(String... progress) {
     
                    pDialog.setProgress(Integer.parseInt(progress[0]));
               }
     
                @Override
                protected void onPostExecute(Void result) {
     
                    dismissDialog(progress_bar_type);
     
     
                }
    et la méthode qui me permet de dl du net

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    public void getFilesToDownload(String url)
     
                {
     
                    int count;
                     try {
     
                      URL urlImg = new URL(url);
                      URLConnection connection = urlImg.openConnection();
                      connection.connect();
     
                      int lenghtOfFile = connection.getContentLength();
                      InputStream input = new BufferedInputStream(urlImg.openStream());
     
     
                      OutputStream output = new FileOutputStream(folder+"/"+name);
     
                      byte data[] = new byte[1024];
     
                      long total = 0;
     
                      while ((count = input.read(data)) != -1) {
                          total += count;
     
                         publishProgress(""+(int)((total*100)/lenghtOfFile));
     
                          output.write(data, 0, count);
     
                      }
     
                      output.flush();           
                      output.close();
                      input.close();
     
                     } catch (Exception e) {
                         e.getMessage();
                     }
     
     
                }
    Ce code marche bien , mais le problème c'est que ça m'affiche une progress bar par fichier téléchargé...
    Or je voudrais avoir seulement une progress bar pour tous les fichiers téléchargés.

    Le souci provient surement de la valeur maximale de la progress bar(100 par défaut) qui va récréer à chaque fois une autre progress bar si on dépasse 100. Seulement je ne vois pas comment régler le problème car je connais pas à l' avance la taille totale de tous les fichiers à télécharger(logique)

    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
    Bon... d'abord c'est quoi ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    publishProgress(""+(int)((total*100)/lenghtOfFile));
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pDialog.setProgress(Integer.parseInt(progress[0]));
    ?

    pourquoi ne pas passer "Integer" simplement comme type de progress ?
    Et puis d'abord la conversion en string c'est Integer.toString(int) pas ""+ ... qui fait intervenir un StringBuilder.


    Ensuite, il y a deux moyens...
    Ou on connait la taille totale du download... et on "incrémente" une variable locale régulièrement qu'on passe en progress par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // Dans le consutrcteur:
    total = 0;
     
    // Dans le getFilesToDownload
    while ((count = input.read(data)) != -1) {
        total += count;
        publishProgress((total*100)/totalLengthOfAllFiles);
        output.write(data, 0, count);
    }
    Autre moyens, puisqu'on a le nombre de fichiers, on va dire que 1 fichier correspond à (100/nbreFichiers), total étant toujours le nombre de bytes lu d'un fichier:
    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    publishProgress((fileIndex*100 + total * 100 / lengthOfFile)/nbreFichiers);
    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
    Août 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 67
    Points : 46
    Points
    46
    Par défaut
    Je te remercie
    Ça fonctionne bien avec le compteur qui incrémente avec le nombre de fichier.

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

Discussions similaires

  1. progress bar en c++
    Par boulette&co dans le forum MFC
    Réponses: 1
    Dernier message: 23/05/2005, 08h26
  2. [ATL] Petite question sur les progress bar
    Par MrMaze dans le forum MFC
    Réponses: 1
    Dernier message: 06/05/2005, 09h40
  3. [MFC]Changer la couleur d'un progress bar
    Par Deedier dans le forum MFC
    Réponses: 1
    Dernier message: 21/04/2005, 18h39
  4. [VB.NET] Mise en place d'une progress bar
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 14
    Dernier message: 19/10/2004, 09h23
  5. Progress bar au boot
    Par saibe dans le forum Administration système
    Réponses: 2
    Dernier message: 18/08/2003, 10h01

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