Показать значение прогресса для загрузки файла volley
мне нужно показать ход загрузки файла в процентах.
В настоящее время я использую волейбол библиотека. Я использую InputStreamVolleyRequest
класс для того чтобы сделать запрос на загрузку и BufferedOutputStream
для чтения / записи файла.
Как я могу показать обновление прогресса наиболее эффективным способом?
2 ответов
как вы упомянули, что вы используете 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();
}
}
если вы уже сделали это, поставить индикатор выполнения легко.
get 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-клиент, чтобы вы могли сделать именно то, что хотите
вот ссылка : http://www.androidhive.info/2014/12/android-uploading-camera-image-video-to-server-with-progress-bar/
надеюсь, это поможет вам ! Ура !