2016-06-13 7 views
5

Ich muss den Fortschritt des Herunterladens von Dateien in Prozent zeigen.Zeige Fortschrittswert für Volley-Datei herunterladen

Momentan verwende ich Volley Bibliothek. Ich benutze InputStreamVolleyRequest Klasse, um die Download-Anfrage und BufferedOutputStream zum Lesen/Schreiben der Datei zu machen.

Wie kann ich die Fortschrittsaktualisierung auf effizienteste Weise anzeigen?

Antwort

4

Wie Sie erwähnt haben, dass Sie verwenden InputStreamVolleyRequest, ich hoffe, dass Sie den folgenden Code oder etwas Ähnliches geschrieben haben, auch:

@Override 
public void onResponse(byte[] response) { 
    HashMap<String, Object> map = new HashMap<String, Object>(); 
    try { 
     if (response!=null) { 

      String content =request.responseHeaders.get("Content-Disposition") 
        .toString(); 
      StringTokenizer st = new StringTokenizer(content, "="); 
      String[] arrTag = st.toArray(); 

      String filename = arrTag[1]; 
      filename = filename.replace(":", "."); 
      Log.d("DEBUG::FILE NAME", filename); 

      try{ 
       long lenghtOfFile = response.length; 

       InputStream input = new ByteArrayInputStream(response); 

       File path = Environment.getExternalStorageDirectory(); 
       File file = new File(path, filename); 
       map.put("resume_path", file.toString()); 
       BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(file)); 
       byte data[] = new byte[1024]; 

       long total = 0; 

       while ((count = input.read(data)) != -1) { 
        total += count; 
        output.write(data, 0, count); 
       } 

       output.flush(); 

       output.close(); 
       input.close(); 
      }catch(IOException e){ 
       e.printStackTrace(); 

      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Wenn Sie dies bereits getan haben, einen Fortschrittsbalken setzen ist einfach. erhalten ProgressDialog Objekt und initialisieren, wie unten dargestellt:

progressDialog = new ProgressDialog(Activity Context here); 
progressDialog.setTitle("Any Title here"); 
progressDialog.setMessage("Downloading in Progress..."); 
progressDialog.setProgressStyle(progressDialog.STYLE_HORIZONTAL); 
progressDialog.setCancelable(false); 
progressDialog.setMax(100); 
progressDialog.setProgress(0); 
progressDialog.show(); 

Dann einfach die while-Schleife ändern, wie unten dargestellt:

while ((count = input.read(data)) != -1) { 
    total += count; 
    output.write(data, 0, count); 
    progress = (int)total*100/file_length; 
    progressDialog.setProgress(progress); 
} 

Versuchen Sie dies und lassen Sie mich wissen.

Aber lassen Sie mich auch informieren Sie, dass Volley nicht für schwere Download geeignet ist. Eher empfehle ich Ihnen, DownloadManager oder Apache HttpClient oder sogar AsyncTask zu verwenden. Sie sind einfacher zu benutzen und wahrscheinlich besser für diesen Zweck.

+0

Vielen Dank. Deine Lösung hat mir geholfen. – Newbie

+0

ur willkommen .. Happy Coding !!! –

+2

wird nicht 'onResponse' aufgerufen, nachdem die Datei vollständig heruntergeladen wurde? –

Verwandte Themen