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.![]()





Rispondi quotando