Visualizzazione dei risultati da 1 a 7 su 7

Visualizzazione discussione

  1. #1
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    [Android] AsyncTask: ProgressDialog non si aggiorna

    Ciao a tutti.
    Sto iniziando, finalmente, a sviluppare per Android e, almeno finora, le soddisfazioni sono molte.

    C'è, però, un problema che non riesco a risolvere.
    Ho scritto un AsyncTask che usa una ProgressDialog per visualizzare la progressione del download di un file: la progress dialog viene correttamente visualizzata e chiusa alla fine, il file viene correttamente scaricato, ma non viene visualizzato alcun progresso.
    Ho navigato in lungo ed in largo, consultato tutta la documentazione (che, per quanto riguarda ProgressDialog, è assolutamente assente), consultato la guida ufficiale, letto decine di post su SO e tutto ciò che ho trovato sono esempi pressoché identici al codice che ho sviluppato io.

    Posto il codice:

    codice:
    public class MyActivity extends Activity {
    
        private class DownTask extends AsyncTask<String, Integer, String> {
            
            private Context ctx;
            private ProgressDialog dialogDownload;
            
            public DownTask(Context ctx) {
                this.ctx = ctx;
            }
            
            @Override
            public void onPreExecute() {
                dialogDownload = new ProgressDialog( ctx );
                dialogDownload.setMessage("Download del file in corso...");
                dialogDownload.setProgressStyle( ProgressDialog.STYLE_HORIZONTAL );
                dialogDownload.setIndeterminate( false );
                dialogDownload.setMax( 100 );
                dialogDownload.show();
            }
            
            @Override
            protected String doInBackground(String... fileUrl) {
                String myFilePath = ...;
                String localPath = Environment.getExternalStorageDirectory().getPath() + myFilePath;
                InputStream input = null;
                OutputStream output = null;
                try {
                    // Mi connetto al URL
                    URL url = new URL( fileUrl[0] );
                    URLConnection connection = url.openConnection();
                    connection.connect();
    
                    // Ottengo la dimensione del file da scaricare
                    int fileLength = connection.getContentLength();
                    
                    // Apro gli stream di input/output
                    input = new BufferedInputStream( url.openStream() );
                    output = new FileOutputStream( localPath );
    
                    // Scarico il file a blocchi di 1024 byte
                    byte data[] = new byte[1024];
                    int total = 0;
                    int count;
                    int lastProgress = 0;
                    while ((count = input.read(data)) != -1) {
                        total += count;
                        Integer byteProgress = total * 100 / fileLength;
                        if (byteProgress != lastProgress) {
                            publishProgress( byteProgress );
                            lastProgress = byteProgress;
                        }
                        output.write(data, 0, count);
                    }
    
                    // Effettuo il flush
                    output.flush();
                } catch (Exception e) {
                    Log.e("MyActivity.DownTask", "Errore in download del file", e);
                } finally {
                    if (output != null) {
                        try { output.close(); } catch (Exception e) { }
                    }
                    if (input != null) {
                        try { input.close(); } catch (Exception e) { }
                    }
                }
                return localPath;
            }
            
            @Override
            protected void onProgressUpdate(Integer... values) {
                super.onProgressUpdate(values);
                dialogDownload.setProgress( values[0] );
            }
            
            @Override
            protected void onPostExecute(String path) {
                dialogDownload.dismiss();
                
                // Lavora col file
                ...
            }
        }
    
        ...
    
        private void iniziaDownload() {
            String myFileUrl = ...;
            DownTask dwn = new DownTask( this );
            dwn.execute( myFileUrl );
        }
        
        ...
    }

    Avviando l'app sull'emulatore funziona tutto (e la progress bar avanza correttamente). Avviando l'app sul mio Galaxy SII, invece, ottengo il comportamento descritto sopra: la dialog appare, rimane ferma (a 0) per tutto il processo di download e viene chiusa alla fine.

    Capita anche a qualcun altro?


    Ciao.
    Ultima modifica di LeleFT; 31-01-2014 a 11:51
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.