2016-10-18 1 views
1

Je développe une application Android en utilisant la rétrofit. Je veux télécharger n'importe quel type de fichier sur mon serveur avec des paramètres. Par exemple, dans mon application, il y a un champ de texte comme le courrier électronique et le champ de téléchargement de fichier. quand je suis entré dans les champs et cliquez sur le bouton soumettre. Il montre le pourcentage de téléchargement de fichier et envoie le fichier et les données au serveur. lorsque le processus de téléchargement va, il veut montrer le pourcentage de fichier terminé. Comment il est possible? Avez-vous utilisé un site de référence ou un tutoriel? S'il vous plaît aidez-moi?Comment afficher la barre de progression lors du téléchargement d'un fichier dans Android retrofit

Répondre

1

créer cette interface

public interface ProgressListener { 
       void transferred(long num); 
      } 

Et cette classe

public class CountingTypedFile extends TypedFile { 

     private static final int BUFFER_SIZE = 4096; 

     private final ProgressListener listener; 

     public CountingTypedFile(String mimeType, File file, ProgressListener listener) { 
      super(mimeType, file); 
      this.listener = listener; 
     } 

     @Override 
     public void writeTo(OutputStream out) throws IOException { 

      byte[] buffer = new byte[BUFFER_SIZE]; 
      FileInputStream in = new FileInputStream(super.file()); 
      long total = 0; 

      try { 

       int read; 
       while ((read = in.read(buffer)) != -1) { 

        total += read; 
        out.write(buffer, 0, read); 

        try{ 
         if (this.listener != null) 
          this.listener.transferred(total); 
        }catch (Exception e){ 

        } 

       } 
      } finally { 
       in.close(); 
      } 
     } 
    } 

Définir cette méthode

@POST("/{path}") 
    public JsonObject makeRequestForAttachmentsUpload(@Path(value = "path", encode = false) String path, @Body MultipartTypedOutput multipartTypedOutput); 

puis appeler la méthode de téléchargement comme celui-ci

RestClient restClient = new RestClient(); 
    ApiService apiService = restClient.getApiService(); 

MultipartTypedOutput multipartTypedOutput = new MultipartTypedOutput(); 
    // add and string parameters    
    for (String key : requestParams.keySet()) { 
        multipartTypedOutput.addPart(key, new TypedString(requestParams.get(key))); 
       } 

    // add attchments 
       multipartTypedOutput.addPart(attachmentName, new CountingTypedFile(attachmentType, new File(attachmentPath), listener)); 
apiService.makeRequestForAttachmentsUpload(requestName, multipartTypedOutput); 

et écouter des progrès en définissant cet écouteur

listener = new DPAPIService.ProgressListener() { 
       @Override 
       public void transferred(long num) { 
        publishProgress(((num/(float) fileSize))); 
       } 
     }; 
+0

Merci Shabir. Je suis nouveau pour rénover. Alors pouvez-vous me dire quel est le code graduel de studio android. –

+0

Vous pouvez lire tous les détails ici https://futurestud.io/tutorials/retrofit-2-upgrade-guide-from-1-9 –

+0

@shabir Votre code utilise l'ancien retrofit. Le fichier TypedFile ne prend pas en charge le nouveau retrofit. Je veux un nouveau code de retrofit. –