Autore Topic: ProgressDialog con spinner che non ruota  (Letto 712 volte)

Offline FeRoX

  • Utente junior
  • **
  • Post: 67
  • Respect: +2
    • Mostra profilo
ProgressDialog con spinner che non ruota
« il: 12 Marzo 2012, 20:25:40 CET »
0
Ciao a tutti, siccome per aprire un Intent la mia app richiede 3-4 secondi, avevo pensato di inserire una ProgressDialog, che dica "Caricamento in corso...". ho implementato tutto con una classe che estende AsyncTask, e funziona.
L'unico problemino, è che la rotella non gira =( Rimane ferma per tutto il tempo.
Vi faccio vedere il codice:

Codice (Java): [Seleziona]
public void onClick(View v) {

             class Atask extends AsyncTask<String,Void,Void>{
                       
                        ProgressDialog pd;

                        @Override
                        protected void onPostExecute(Void result) {
                                // TODO Auto-generated method stub
                                super.onPostExecute(result);
                                pd.dismiss();
                        }

                        @Override
                        protected void onPreExecute() {
                                // TODO Auto-generated method stub
                                super.onPreExecute();
                                pd=ProgressDialog.show(FindActivity.this,"","Caricamento in corso...",true,false);
                        }

                        @Override
                        protected Void doInBackground(String... params) {
                                String activity=params[0];
                                Intent iMain=new Intent(activity);
                                startActivity(iMain);                          
                                return null;
                        }
                }

              if(v.equals(ivUffici)){
                                               
                        new Atask().execute("com.find.UFFICIACTIVITY");
                }

}

Qualcuno sa cosa potrei modificare???
grazie mille ;)

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:ProgressDialog con spinner che non ruota
« Risposta #1 il: 12 Marzo 2012, 20:53:32 CET »
0
Il problema potrebbe (dico potrebbe perchè ipotizzo) dipendere dal fatto che ci metti tutti quei secondi perchè lanci una activity che deve eseguire codice pesante all'apertura. Così l'activity secondaria parte e non è che lo spinner si ferma, ma semplicemente non viene aggiornato perchè siamo già passati all'altra activity, anche se non ancora disegnata.

Se la mia ipotesi è valida, una soluzione sarebbe mettere l'AsyncTask con lo spinner nell'activity chiamata e spostare il suo codice "pesante" nella doinbackground dello stesso asynctask. Così facendo, l'activity chiamata appare immediatamente, e lo spinner dovrebbe girare fintanto che non ha finito il lavoro.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline FeRoX

  • Utente junior
  • **
  • Post: 67
  • Respect: +2
    • Mostra profilo
Re:ProgressDialog con spinner che non ruota
« Risposta #2 il: 12 Marzo 2012, 22:53:43 CET »
0
Infatti è come dici tu....
Però ho un problema, ho fatto come dici tu e ora la rotellina gira.
Però siccome ciò che mi richiede molto tempo è il caricamento di determinati file che ho, dai quali prendo delle informazioni che poi vanno in una listview. Mi sa che questo asynktask alla fine è un thread, che quindi non può modificare le View.
Quindi imponendo nel doBackground() il caricamento da file e la modifica della listview non va bene.
Se metto solo la lettura da file nel doBackground() e la modifica delle listview fuori(cioè nel metodo onCreate(), mi da una NullPointerException, perche ancora il thread non ha finito di caricare i file....
che si può fare????

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:ProgressDialog con spinner che non ruota
« Risposta #3 il: 12 Marzo 2012, 23:05:17 CET »
+1
Tutto ciò che metti nei metodi onPostExecute, onProgressUpdate, onPreExecute dell'AsyncTask viene eseguito nel thread di UI, per cui puoi mettere in quei metodi il codice che agisce sulla UI.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline FeRoX

  • Utente junior
  • **
  • Post: 67
  • Respect: +2
    • Mostra profilo
Re:ProgressDialog con spinner che non ruota
« Risposta #4 il: 12 Marzo 2012, 23:10:23 CET »
0
Ok grazie....
Dopo un pò di prove, ho risolto.
Non so come mai, ma se mettevo tutto nel metodo doInBackground() non se ne andava la ProgressDialog e crashava l'applicazione.
Ho fatto in questo modo:

Nel doInBackground() ho inserito ciò che rallentava l'activity(il caricamento da file), mentre in onPostExecute(Void result) ho inserito tutte le modifiche alla listview, e in più per ultimo il dismiss() della ProgressDialog. Cosi funziona, va tutto bene.

Grazie per la mano... davvero gentile ;)