2010-11-09 16 views
3

J'ai besoin d'aide. J'ai cherché des jours en essayant de trouver une solution à mon problème. Je souhaite afficher une barre de progression lors du téléchargement d'un fichier sous Android. J'ai trouvé assez pour télécharger le fichier mais j'ai eu du mal à comprendre comment afficher une barre de progression.Android - Affichage d'une barre de progression lors du téléchargement d'un fichier

Voici mon code de téléchargement:

  String sURL = getString(R.string.DOWNLOAD_URL) + getString(R.string.DATABASE_FILE_NAME); 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpGet httpget = new HttpGet(sURL); 
     HttpResponse response = httpclient.execute(httpget); 
     HttpEntity entity = response.getEntity(); 
     Header[] clHeaders = response.getHeaders("Content-Length"); 
     Header header = clHeaders[0]; 
     int totalSize = Integer.parseInt(header.getValue()); 
     int downloadedSize = 0; 
     if (entity != null) { 
      InputStream stream = entity.getContent(); 
      byte buf[] = new byte[1024 * 1024]; 
      int numBytesRead; 

      BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(file)); 
      do { 
       numBytesRead = stream.read(buf); 
       if (numBytesRead > 0) { 
        fos.write(buf, 0, numBytesRead); 
        downloadedSize += numBytesRead; 
        //updateProgress(downloadedSize, totalSize); 
       } 
      } while (numBytesRead > 0); 
      fos.flush(); 
      fos.close(); 
      stream.close(); 
      httpclient.getConnectionManager().shutdown(); 
+0

Vous devez effectuer le téléchargement dans un fil séparé. Ou bien, votre code bloquera le thread principal de l'interface utilisateur qui bloque tout l'écran – xandy

Répondre

2

Utilisez un AsyncTask. Il existe des dizaines de tutoriels en ligne pour exactement ce que vous essayez de faire.

+0

Oui, j'ai regardé AsyncTask mais comment afficher la boîte de dialogue de progression et la mettre à jour ... en fonction de mon code? –

+0

La réponse de Zarah vous oriente dans la bonne direction. Il y a beaucoup de documentation sur comment démarrer, mettre à jour et ignorer une boîte de dialogue de progression dans une tâche asynchrone. – Falmarri

0

Avez-vous essayé de lire le documentation for AsyncTask? L'exemple est exactement ce que vous essayez de faire. L'exemple utilise la méthode publishProgress() et onProgressUpdate().

Définissez une barre de progression sur OnPreExecute(), appelez régulièrement publishProgress() et mettez à jour la barre de progression dans onProgressUpdate().