example - volley post android studio




Mostrar el valor de progreso para la descarga de archivos volley (2)

Necesito mostrar el progreso de la descarga de archivos en porcentaje.

Actualmente estoy usando la biblioteca de Volley . Utilizo la clase InputStreamVolleyRequest para realizar la solicitud de descarga y BufferedOutputStream para leer / escribir el archivo.

¿Cómo puedo mostrar la actualización de progreso de la manera más eficiente?


Como mencionó que está utilizando InputStreamVolleyRequest , espero que haya escrito el siguiente código o algo similar también:

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

Si ya has hecho esto, poner una barra de progreso es fácil. obtener ProgressDialog objeto ProgressDialog e inicializar como se muestra a continuación:

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

Luego simplemente modifica el ciclo while como se muestra a continuación:

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

Intenta eso y dejame saber.

Sin embargo, permítanme también informarles que Volley no es adecuado para descargas pesadas. Más bien, le sugiero que use DownloadManager o Apache's HttpClient o incluso AsyncTask . Son más fáciles de usar y probablemente mejores para este propósito.






android-volley