2016-11-29 1 views
0

Bon moment de la journée.
J'essaie de faire une application qui est censée télécharger des fichiers sur le serveur et afficher la progression du téléchargement dans ProgressDialog.Mettre à jour la boîte de dialogue de progression

Ceci est le code que j'ai jusqu'à présent:
Créer ProgressDialog pour Uploading Procédure

private void createUploadingDialog(int filesCount) { 
    uploadingDialog = new ProgressDialog(getActivity()); 
    uploadingDialog.setIndeterminate(true); 
    loadingDialog.setMessage(getString(R.string.upload_progress, 0, filesCount)); 
    loadingDialog.show(); 
} 

Rejeter ProgressDialog pour Uploading Procédure

private void dismissUploadingDialog() { 
    if (uploadingDialog.isShowing()) 
     uploadingDialog.dismiss(); 
} 

Mise à jour ProgressDialog pour Uploading Procédure

private void updateUploadingDialog(final String dialogMessage) { 
    class UpdateDialog implements Runnable { 
     private String messageString; 
     private UpdateDialog(String ms) { messageString = ms; } 
     public void run() { 
      uploadingDialog.setMessage(messageString); 
     } 
    } 
    getActivity().runOnUiThread(new UpdateDialog(dialogMessage)); 
} 

Appel pour créer dialogue

createUploadingDialog(imagesPathsArray.size()); 

Appel de rejeter dialogue

dismissUploadingDialog(); 

Appel à jour onSuccess dialogue

updateUploadingDialog(getString(R.string.upload_progress, i, imagesPathsArray.size())); 

Appel à jour onFailure dialogue

updateUploadingDialog(getString(R.string.retrying_request)); 

La boîte de dialogue est affichée dans le fragment. Pour envoyer des images au serveur j'utilise Retrofit2.

Lors de la configuration initiale de la boîte de dialogue, le message est correctement défini (indiquant le nombre total de fichiers et le nombre actuel), mais le message n'est pas mis à jour lors de l'appel de mise à jour. Pour quelque raison, aucune erreur n'est levée et si j'ajoute Log.d, il montre même que la méthode a été appelée.

Nous vous remercions de votre aide!

+0

vous devriez lire ceci. Cela vous aidera. http://stackoverflow.com/questions/3028306/download-a-file-with-android-and-showing-the-progress-in-a-progressdialog?rq=1 –

Répondre

0

Je pense que vous appelez la mise à jour des progrès qu'une seule fois, comment allez-vous listning à progresser auditeur de changement d'état ?, si vous voulez utiliser que vous devez appeler en permanence updateUploadingDialog qui n'est pas une bonne procédure

Vous devez écrire la procédure de téléchargement dans AsyncTask et mettre à jour des progrès dans onProgressUpdate() méthode

Here et here sont par exemple pour référence

sur preExecute initialiser la barre de progression, en doinbackground télécharger le fichier, dans onProgressUpdate mettre à jour les ba progrès r et postExecute faire ce que vous voulez faire après le téléchargement

Hope this helps

0

Selon vous n'utilisez pas AsyncTask, vous ne pouvez pas l'occasion de fonction onProgressUpdate. Donc, vous devez mettre à jour votre statut de barre de progression manuellement comme si vous utilisiez votre propre thread et vous l'avez déjà fait.Mais, j'ai résolu mon problème en utilisant ci-dessous le code source, vous pouvez le vérifier:

private void createThread(){ 
    Runnable runable = new updateProgressStatus(); 
    progressUpdateThread = new Thread(runnable); 
    progressUpdateThread.start(); 
} 

public class updateProgressStatus implements Runnable { 
    public void run() { 
     while(Thread.currentThread()==progressUpdateThread)    
      try { 
       Thread.sleep(1000);  
       progressHandler.sendMessage(YOUR MESSAGE); 
      } catch (InterruptedException e) { 
       // Interrupt problem 
       Thread.currentThread().interrupt(); 
      } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 
} 

private Handler progressHandler = new Handler(){ 
    @Override 
    public void handleMessage(Message message) { 
     // Now, update your progress bar status 
     progress.setProgress(message.what); 
    } 
};