Autore Topic: Avanzamento ProgressBar all'interno di un AsyncTask  (Letto 1826 volte)

Offline dr4gone

  • Utente junior
  • **
  • Post: 66
  • Respect: +1
    • Mostra profilo
Avanzamento ProgressBar all'interno di un AsyncTask
« il: 13 Marzo 2012, 14:31:12 CET »
0
Ciao a tutti.
Con del codice che ho scritto riesco a gestire una progressDialog, all'interno di un Asynctask.

Nello stesso codice stavo cercando di implementare una progressBar al posto della ProgressDialog, ma ho difficoltà nel gestire l'avanzamento della barra.

Il codice sarebbe una cosa del genere:

Codice (Java): [Seleziona]
public void Recupero_Dati() {

                HttpGetTask task = new HttpGetTask();
                pd = new ProgressDialog(mContext);
                pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                pd.setMessage("Recupero dati in corso...");
                pd.setCancelable(false);
                pd.setProgress(0);
                pd.setMax(0);
                progressDialog.show();
                task.execute();
                        }

     
//Inizio AsyncTask
        public class HttpGetTask extends AsyncTask<String,String,String>  {
           @Override
           public String doInBackground(String... params) {

                   try {
                   doc = Jsoup.parse(new URL("http://mIA URL), 35000);
         
                   for (int i=0 ; i<50 ; i++) {
                 
                   Dato1[i] = doc.getElementById("
Dato1ID+"i");
                   Dato2[i] = doc.getElementById("Dato2ID+"i");
                   Dato3[i] = doc.getElementById("
Dato3ID+"i");
                   Dato4[i] = doc.getElementById("Dato4ID+"i");
                   Dato5[i] = doc.getElementById("
Dato5ID+"i");
                   }
                   }
                   catch (MalformedURLException e) {
                   pd.dismiss();
                   e.printStackTrace();
           }
                   catch (IOException e) {
                   pd.dismiss();
                   e.printStackTrace();
           }
                        return result;                              
   }      
           
                protected void onProgressUpdate(String... values) {
             
                          // Devo gestire in qualche modo l'aggiornamento della barra

           
                               
            }

            protected void onPostExecute(String result) {
                // chiudo la progress bar
               pd.dismiss();
               

Mi fate capire cosa devo mettere nell' onProgressUpdate per fare avanzare la barra e se devo aggiungere qualche controllo all'interno del doInBackground?

 ;-)

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:Avanzamento ProgressBar all'interno di un AsyncTask
« Risposta #1 il: 13 Marzo 2012, 14:42:46 CET »
0
Se vedi il codice nel primo esempio della pagina descrittiva di AsyncTask, quello che ti serve è richiamare il publishProgress() quando vuoi aggiornare la barra, passando il valore da aggiornare; questo a sua volta richiama onProgressUpdate e passa quel valore, che tu vai ad applicare alla barra.

AsyncTask | Android Developers
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline dr4gone

  • Utente junior
  • **
  • Post: 66
  • Respect: +1
    • Mostra profilo
Re:Avanzamento ProgressBar all'interno di un AsyncTask
« Risposta #2 il: 13 Marzo 2012, 15:10:47 CET »
0
si come al silto non mi so spiegare :D

Quello che hai detto mi è chiaro, ma non mi è chiaro come realizzarlo....
O meglio non riesco a capire come definire il tempo che serve a fare il parsing dell'url...

Forse devo mettere il publishProgress(); all'interno del for e a ogni incremento i++ passare il risultato all' onProgressUpdate??



Intanto onProgressUpdate
Codice (Java): [Seleziona]
protected void onProgressUpdate(String... valore) {
         setProgressPercent(valore[0]);
     }
« Ultima modifica: 13 Marzo 2012, 15:25:34 CET da dr4gone »

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:Avanzamento ProgressBar all'interno di un AsyncTask
« Risposta #3 il: 13 Marzo 2012, 15:32:05 CET »
0
Effettivamente per le operazioni di rete sarebbe meglio uno spinner al posto della barra, essendo la durata completamente indeterminata.

Altrimenti puoi decidere di dividere l'operazione in fasi, e associare a ciascuna fase un avanzamento del progress. Ma penso che lo spinner sia più adatto.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline dr4gone

  • Utente junior
  • **
  • Post: 66
  • Respect: +1
    • Mostra profilo
Re:Avanzamento ProgressBar all'interno di un AsyncTask
« Risposta #4 il: 13 Marzo 2012, 15:44:11 CET »
0
uno spinner?  o_O

Ma lo spinner non è quella specie di menu a tendina?

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:Avanzamento ProgressBar all'interno di un AsyncTask
« Risposta #5 il: 13 Marzo 2012, 15:58:14 CET »
0
uno spinner?  o_O

Ma lo spinner non è quella specie di menu a tendina?

A precindere dal nome, questo:

NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline dr4gone

  • Utente junior
  • **
  • Post: 66
  • Respect: +1
    • Mostra profilo
Re:Avanzamento ProgressBar all'interno di un AsyncTask
« Risposta #6 il: 13 Marzo 2012, 16:01:09 CET »
0
Non l'ho mai usato , hai qualche idea di come si implementi o qualche reference da farmi seguire?

Offline dr4gone

  • Utente junior
  • **
  • Post: 66
  • Respect: +1
    • Mostra profilo
Re:Avanzamento ProgressBar all'interno di un AsyncTask
« Risposta #7 il: 13 Marzo 2012, 16:04:00 CET »
0
ahhh intendi sempre una progress dialog ma con questo metodo...

public static final int STYLE_SPINNER

Ora forse ho capito, ma questo è quello che gia usavo :)
Sempre se stiamo parlando del cerchietto che ruota a sinistra e a destra ho il testo che ho inserito..

Bhe se non si può fare qualcosa di diverso cercherò di personalizzare questo dialog :)
« Ultima modifica: 13 Marzo 2012, 16:15:43 CET da dr4gone »

Offline dr4gone

  • Utente junior
  • **
  • Post: 66
  • Respect: +1
    • Mostra profilo
Re:Avanzamento ProgressBar all'interno di un AsyncTask
« Risposta #8 il: 15 Marzo 2012, 09:16:29 CET »
0
ho risolto con un compromesso..

Ad ogni fine del ciclo for all'interno del doinbackground dell'asinctask ho messo un vettore di int che si aggiorna e poi in con il publishProgress ho fatto in modo di calcolare la percentuale di completamento e stamparla man mano che scorre il for ;)