Autore Topic: Download file ed AsynkTask  (Letto 593 volte)

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Download file ed AsynkTask
« il: 17 Maggio 2012, 00:56:50 CEST »
0
Ciao a tutti, ho necessità di effettuare il download da internet di un file visualizzando un ProgressDialog con la percentuale di avanzamento del download. Per fare ciò ho utilizzato AsynkTask però noto che a volte, quando passa molto tempo, mi esce il messaggio che l'applicazione non risponde quindi mi chiedevo se l'AsynkTask vada usato in un thread oppure no...onestamente pensavo che AsynkTask stesso lanciasse un thread di lavoro o mi sbagliavo ?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Download file ed AsynkTask
« Risposta #1 il: 17 Maggio 2012, 07:56:54 CEST »
0
Se puoi mostrare un po' di codice qualcuno può darci un'occhiata.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Download file ed AsynkTask
« Risposta #2 il: 17 Maggio 2012, 14:12:21 CEST »
0
Anche tu hai ragione :)

Codice (Java): [Seleziona]
public class DownloadAPK_Activity extends Activity {
        private ProgressDialog mProgressDialog;
        private Context context = this;
        private DownloadFile downloadFile;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button b = (Button)findViewById(R.id.button_update);
        b.setOnClickListener(new OnClickListener(){

                        @Override
                        public void onClick(View v) {
                                mProgressDialog = new ProgressDialog(DownloadAPK_Activity.this);
                    mProgressDialog.setMessage("Downloading file..");
                    mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                    mProgressDialog.setCancelable(false);
                    mProgressDialog.show();
                                downloadFile = new DownloadFile();
                                downloadFile.execute(URL_DEL_FILE_DA_SCARICARE);                               
                        }
               
        });
       
    }

private class DownloadFile extends AsyncTask<String, Integer, String> {
                           
            @Override
            protected String doInBackground(String... sUrl) {
                try {
                    URL url = new URL(sUrl[0]);
                    URLConnection connection = url.openConnection();
                    connection.connect();
                    connection.setConnectTimeout(360000);
                    // this will be useful so that you can show a typical 0-100% progress bar
                    int fileLength = connection.getContentLength();
         
                    // download the file
                    InputStream input = new BufferedInputStream(url.openStream());
                    OutputStream output = new FileOutputStream("/sdcard/pippo.apk");
         
                    byte data[] = new byte[1024];
                    long total = 0;
                    int count;
                    while ((count = input.read(data)) != -1) {
                        total += count;
                        // publishing the progress....
                        publishProgress((int) (total * 100 / fileLength));
                        output.write(data, 0, count);
                    }
         
                    output.flush();
                    output.close();
                    input.close();
                } catch (Exception e) {  
                        mProgressDialog.dismiss();
                              Toast.makeText(DownloadAPK_Activity.context, "Errore connessione, riprovare grazie", Toast.LENGTH_LONG).show();
                }
              return null;
           }
           
                @Override
                protected void onProgressUpdate(Integer... progress) {
                    super.onProgressUpdate(progress);
                    mProgressDialog.setProgress(progress[0]);
                }

                        @Override
                        protected void onPostExecute(String result) {
                                super.onPostExecute(result);
                                mProgressDialog.dismiss();                     
}
               
               
    }

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Download file ed AsynkTask
« Risposta #3 il: 18 Maggio 2012, 08:18:56 CEST »
0
Mi sembra che l'approccio generale sia corretto, strano che ti dia il force close.

Non mi viene in mente niente di particolare.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Download file ed AsynkTask
« Risposta #4 il: 18 Maggio 2012, 12:49:50 CEST »
0
Guarda, sai quando mi capita esattamente ? In pratica la mia applicazione ha un pulsante donwload, se lo premi parte il download e tutto ok, se però il download per qualche motivo si interrompe, allora se tu riclicchi il pulsante lo stesso resta sempre arancione e dopo un pò dice che l'applicazione non risponde....può essere utile questo indizio ? non è che l'AsynkTask precedente deve essere distrutto in qualche modo ?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Download file ed AsynkTask
« Risposta #5 il: 18 Maggio 2012, 12:52:10 CEST »
0
Direi di si. Ci vuole un meccanismo di timeout che faccia terminare l'asynctask. Magari prova a ridurre il timeout di connessione a pochi secondi, per provare cosa accade.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Download file ed AsynkTask
« Risposta #6 il: 18 Maggio 2012, 12:53:34 CEST »
0
Non è che il problema è la input.close() /output.close() che non viene effettuata se entri nel catch?
« Ultima modifica: 18 Maggio 2012, 12:56:47 CEST da DarnellNajanReed »

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:Download file ed AsynkTask
« Risposta #7 il: 18 Maggio 2012, 13:13:34 CEST »
+1
Guarda, sai quando mi capita esattamente ? In pratica la mia applicazione ha un pulsante donwload, se lo premi parte il download e tutto ok, se però il download per qualche motivo si interrompe, allora se tu riclicchi il pulsante lo stesso resta sempre arancione e dopo un pò dice che l'applicazione non risponde....può essere utile questo indizio ? non è che l'AsynkTask precedente deve essere distrutto in qualche modo ?

Prova a cancellare l'AsynkTask con il metodo cancel(boolean) AsyncTask | Android Developers prima di rilanciarlo...
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Download file ed AsynkTask
« Risposta #8 il: 18 Maggio 2012, 13:45:26 CEST »
0
Prova a cancellare l'AsynkTask con il metodo cancel(boolean) AsyncTask | Android Developers prima di rilanciarlo...
E si pare fosse quello ;) continuo a fare un pò di prove...
Grazie !!