0 votos

Hola, no sé si alguien ve los post, o si el administrador del foto sigue por aquí, porque veo cantidad de post sin responder, si no es así, y ve este post, que informe de que el foro está muerto para no seguir preguntando.

 

Dicho esto, paso a pedir vuestra ayudar para ver si puedo solucionar este problema....

 

Estoy intentando copiar una carpeta de un lugar a otro mostrando una barra de progreso.
En este caso, estoy intentando copiar un archivo, que supongo que será igual que una carpeta con 100 archivos.

El archivo se copia, pero se muestra el ProgressBar sin que la barra muestre nada.


Este es el código que estoy utilizando en el onCreateView:

 

    FileInputStream fileInputStream;
    FileOutputStream fileOutputStream;

    Thread copyingThread;

    ProgressDialog progressDialog;

    Handler mainHandler = new Handler(Looper.getMainLooper());

------------------------------

copyingThread = new Thread(new Runnable() {
    @Override
    public void run() {
        File sourceFile = new File(Environment.getExternalStoragePublicDirectory(DIRECTORY_DOCUMENTS) + "/Documentos.rar");
        File destFile = new File(Environment.getExternalStoragePublicDirectory(DIRECTORY_DOCUMENTS) + "/11/Archivo Copiado.rar");

        long length = sourceFile.length();
        int bytesRead;
        int totalBytesRead = 0;
        byte[] buffer = new byte[4 * 1024]; 
        try {
            fileInputStream = new FileInputStream(sourceFile);
            fileOutputStream = new FileOutputStream(destFile);

            while (!Thread.currentThread().isInterrupted()
                    && (bytesRead = fileInputStream.read(buffer)) != -1) {

                fileOutputStream.write(buffer, 0, bytesRead);

                totalBytesRead += bytesRead;
                int percent = (int) (totalBytesRead * 100 / length);

                mainHandler.post(new Runnable() {
                    @Override
                    public void run() {

                        progressDialog = new ProgressDialog(getActivity());
                        progressDialog.setTitle("Titulo");
                        progressDialog.setMax(100);
                        progressDialog.setMessage("Mensaje ProgressBar");
                        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                        progressDialog.show();
                        progressDialog.setCancelable(false);

                        progressDialog.setProgress(percent);

                    }
                });
            }
        } catch (Exception e) {
            System.out.println("foo");
        }
    }
});

 

Bueno Ramon, si ves este post y te animas a responder, te lo agradeceria.

 

Gracias.

por en Android

1 Respuesta

0 votos

Mejor que Thread de Java, sería más interesante gestionarlo con AsyncTask (que justo para eso está), tienes ejemplos en: https://jarroba.com/asynctask-en-android/

Aunque ahora AsynkTask quedó obsoleto a favor de las corrutinas de  Kotlin como se puede ver en: https://developer.android.com/topic/libraries/architecture/coroutines

Y de los Executors de Java: https://developer.android.com/reference/java/util/concurrent/Executor

 

 

Muerto no está el foro, queda abierto por si alguien tiene la amabilidad de responder. Por mi parte, últimamente me es muy complicado entrar a responder por diversos motivos y quiero dar respuestas detalladas, como a mí me gustaría que me las dieran, pero eso requiere de mucho tiempo del que ahora no dispongo ;)

por