我需要以百分比顯示文件下載的進度。顯示排除文件下載的進度值
目前我正在使用Volley庫。我使用InputStreamVolleyRequest
類來創建下載請求,並使用BufferedOutputStream
來讀取/寫入文件。
如何以最有效的方式顯示進度更新?
我需要以百分比顯示文件下載的進度。顯示排除文件下載的進度值
目前我正在使用Volley庫。我使用InputStreamVolleyRequest
類來創建下載請求,並使用BufferedOutputStream
來讀取/寫入文件。
如何以最有效的方式顯示進度更新?
正如你剛纔提到你正在使用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
。它們更易於使用,可能更適合此目的。
我使用進度條與HttpClient的,所以如果你想要做的進度,然後我的建議是使用HTTP客戶端,這樣就可以使正是你想要
希望這將幫你 !乾杯!
這不回答原來的問題。 –
謝謝。你的解決方案幫了我。 – Newbie
我們歡迎..快樂編碼! –
isnt'onResponse'文件完全下載後調用? –