Autore Topic: progressdialog e asynctask  (Letto 1400 volte)

Offline topix93

  • Utente junior
  • **
  • Post: 84
  • Respect: +1
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus ONE
  • Sistema operativo:
    Windows 7 Professional 64 bit, Ubuntu 11.04
progressdialog e asynctask
« il: 25 Settembre 2012, 16:36:37 CEST »
0
ho creato una classe asynctask che mi permette di visualizzare un progressdialog cosi:
Codice (Java): [Seleziona]
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;

public class CaricamentoProgressDialog extends AsyncTask<String, Void, String> {

        private ProgressDialog caricamento;
        private boolean finish = false;
       
        public CaricamentoProgressDialog(Context cx){
                caricamento = new ProgressDialog(cx);
        }
       
        @Override
        protected void onPreExecute() {
                super.onPreExecute();
                caricamento.setTitle("");
                caricamento.setMessage("Caricamento in corso...");
                caricamento.setIndeterminate(true);
                caricamento.setCancelable(false);
                caricamento.show();
        }
        @Override
        protected String doInBackground(String... params) {
                       
                while(!finish){
                        try {
                                Thread.sleep(100);
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                }

                return null;
        }

        @Override
        protected void onPostExecute(String result) {
                super.onPostExecute(result);
                if (caricamento.isShowing()) {
                        caricamento.dismiss();
                   }
        }
        public void stop(){
                finish = true;
        }
       
}

e da un'altra classe, in un metodo (richiamato schiacciando un bottone)eseguo questo thread e nel mentre avvio un nuovo thread che si occupa di effettuare una query ad un database, il risultato di questa query va a finire in una listview... il problema e che la progressdialog non la visualizzo subito appena schiaccio l bottone, ma solo alla fine... in poche parole, prima viene eseguita la query e solo alla fine si riesce a visualizzare per un istante la finestra di caricamento...

come posso risolvere questo problema?

Offline topix93

  • Utente junior
  • **
  • Post: 84
  • Respect: +1
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus ONE
  • Sistema operativo:
    Windows 7 Professional 64 bit, Ubuntu 11.04
Re:progressdialog e asynctask
« Risposta #1 il: 25 Settembre 2012, 16:55:49 CEST »
0
anche cosi non funziona

Codice (Java): [Seleziona]
public void onClick(View v) {
        if (v.getId() == R.id.btn){

                caricamento = new CaricamentoProgressDialog(this);
                caricamento.execute();
                try {
                        Thread.sleep(5000);
                } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                //getDati();
                caricamento.stop();
        }
}

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:progressdialog e asynctask
« Risposta #2 il: 25 Settembre 2012, 17:25:03 CEST »
0
Avevo un problema simile, e ho risolto cosi: Crea il progress dialog e fai lo show al di fuori dell'asynctask (prima dell execute) e fai il dismiss da dentro l'asynctask, cosi:

Codice (Java): [Seleziona]
public class PippoActivity extends Activity
{
ProgressDialog pdLoading;

//varie...

public void onClick(View v) {
        if (v.getId() == R.id.btn){

                pdLoading = ProgressDialog.show(PippoActivity.this,"Caricamento","Caricamento in Corso...",true,false);
                pdLoading.setIndeterminate(true);
               
                caricamento = new CaricamentoProgressDialog(this);
                caricamento.execute();
        }
}
//varie
}

e nella asynctask

Codice (Java): [Seleziona]
@Override
            protected void onPostExecute(String result) {
                pdLoading.dismiss();
            }
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline topix93

  • Utente junior
  • **
  • Post: 84
  • Respect: +1
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus ONE
  • Sistema operativo:
    Windows 7 Professional 64 bit, Ubuntu 11.04
Re:progressdialog e asynctask
« Risposta #3 il: 25 Settembre 2012, 17:39:43 CEST »
0
non mi funziona... sempre come prima

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:progressdialog e asynctask
« Risposta #4 il: 25 Settembre 2012, 19:35:23 CEST »
0
Ma perchè usi due thread? Fai una asynctask e basta: nella asynctask lanci il progressDialog e lanci l'aggiornamento del DB... alla fine della asynctask, aggiorni la listview e chiudi il progressDialog! ;)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline topix93

  • Utente junior
  • **
  • Post: 84
  • Respect: +1
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus ONE
  • Sistema operativo:
    Windows 7 Professional 64 bit, Ubuntu 11.04
Re:progressdialog e asynctask
« Risposta #5 il: 25 Settembre 2012, 19:48:27 CEST »
0
volevo fare in quel modo perchè dopo la query sul db devo eseguire anche altre istruzioni. inoltre la classe per la connessione al db viene utilizzata anche da altre classi

Offline topix93

  • Utente junior
  • **
  • Post: 84
  • Respect: +1
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus ONE
  • Sistema operativo:
    Windows 7 Professional 64 bit, Ubuntu 11.04
Re:progressdialog e asynctask
« Risposta #6 il: 26 Settembre 2012, 10:32:27 CEST »
0
ho modificato ora il tutto lasciando un unica classe asynctask pubblica

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:progressdialog e asynctask
« Risposta #7 il: 26 Settembre 2012, 12:10:55 CEST »
0
Non vedo il motivo di utilizzare AsyncTask + Thread. Se vuoi usare un Thread lanci il ProgressDialog prima di eseguirlo e lo chiudi alla fine del Thread. Altrimenti usi un solo AsyncTask in cui fai tutte le operazioni che ti servono.
Non ha senso usare un AsyncTask che l'unica cosa che fa é la sleep.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline topix93

  • Utente junior
  • **
  • Post: 84
  • Respect: +1
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus ONE
  • Sistema operativo:
    Windows 7 Professional 64 bit, Ubuntu 11.04
Re:progressdialog e asynctask
« Risposta #8 il: 28 Settembre 2012, 14:53:52 CEST »
0
risolto creando un'interfaccia onFinishListener che viene implementata nella classe dove viene eseguito l'asynctask

Offline ivanp

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy next turbo, Samsung Galaxy note
  • Play Store ID:
    Shakesoft
  • Sistema operativo:
    Win 7; Centos 6.2
Re:progressdialog e asynctask
« Risposta #9 il: 17 Aprile 2013, 17:50:01 CEST »
0
Avevi lo stesso mio problema, mi potresti spiegare come hai fatto a risolverlo? Io non ci sono riuscito....