2016-06-13 71 views
5

我需要以百分比顯示文件下載的進度。顯示排除文件下載的進度值

目前我正在使用Volley庫。我使用InputStreamVolleyRequest類來創建下載請求,並使用BufferedOutputStream來讀取/寫入文件。

如何以最有效的方式顯示進度更新?

回答

4

正如你剛纔提到你正在使用InputStreamVolleyRequest,我希望你寫了下面的代碼或類似的東西還有:

@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(); 
    } 
} 

如果你已經做到了這一點,把一個進度條很容易。 得到ProgressDialog對象並初始化,如下圖所示:

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(); 

然後,只需修改while循環,如下圖所示:

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

試試這個,讓我知道。

但是讓我告訴你,Volley並不適合大量下載。相反,我建議你使用DownloadManager或Apache的HttpClient甚至AsyncTask。它們更易於使用,可能更適合此目的。

+0

謝謝。你的解決方案幫了我。 – Newbie

+0

我們歡迎..快樂編碼! –

+2

isnt'onResponse'文件完全下載後調用? –

相關問題