Autore Topic: Progress dialog non appare!!!  (Letto 841 volte)

Offline andreaginobili

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7, Ubuntu
Progress dialog non appare!!!
« il: 28 Dicembre 2011, 19:05:36 CET »
0
Ragazzi ho un problemino... ho una pulsate al click del quale voglio ke parte un thread e nell'attesa ke esso finisca la sua esecuzione voglio ke appaia una progressDialog solo ke non mi appare!!!!!
Codice (Java): [Seleziona]
Button b = new Button(context);
                b.setText("Trama");
                resto.addView(b);
                b.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                try {
                                        p = new ProgressDialog(context);
                                        p.show();
                                        String link = libro.getLink().trim();
                                        CalcolamiTramaThread t = new CalcolamiTramaThread(v, link);
                                        t.start();
                                        t.join();
                                        ttra = t.restituisciTrama();
                                        p.dismiss();
                                        Intent intent = new Intent(v.getContext(),
                                                        VisualizzaTrama.class);
                                        intent.putExtra("trama", ttra);
                                        v.getContext().startActivity(intent);
                                } catch (InterruptedException e) {
                                        e.printStackTrace();
                                }
                        }
                });

cosa ho sbagliato????????????

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Progress dialog non appare!!!
« Risposta #1 il: 28 Dicembre 2011, 19:09:16 CET »
0
Scusa ma che senso ha fare t.start() e sotto t.join() ?è praticamente come non avere il thread perchè ti blocca l'esecuzione del main thread. E come ti ho scritto nell'altra discussione, ti manda anche l'activity in stato di anr.

Ti consiglio di usare un AsyncTask

AsyncTask | Android Developers

Offline andreaginobili

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7, Ubuntu
Re:Progress dialog non appare!!!
« Risposta #2 il: 28 Dicembre 2011, 19:12:06 CET »
0
Faccio in quel modo perchè il thread deve concludere e dopo mi ritorna il valore per questo faccio la join, per aspettare ke finisca...
Altrimenti non saprei come fare a farmi tornare il valore...

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Progress dialog non appare!!!
« Risposta #3 il: 28 Dicembre 2011, 19:14:56 CET »
0
Si ma sarai d'accordo con me che se tu fai partire un thread in modo dale non bloccare quello della UI e poi fai subito dopo una join che è bloccante tantovale che non fai neanche partire il thread. Come ti ho detto sopra, modifica il codice usando un AsyncTask, vedrai che risolvi tutto.

Offline andreaginobili

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7, Ubuntu
Re:Progress dialog non appare!!!
« Risposta #4 il: 28 Dicembre 2011, 19:25:29 CET »
0
Si si sono d'accordissimo con te :) solo che ti spiego, non ho mai usato AsyncTask e non saprei come fare a farmi ritornare un valore. cioè vedi quando io faccio : ttra = t.restituisciTrama(); allora come saprai meglio di me "restituisciTrama" è un metodo del thread ke mi ritorna una stringa. Come faccio a farlo con AsyncTask?Scusami è la prima volta che l'utilizzo :(

Offline andreaginobili

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7, Ubuntu
Re:Progress dialog non appare!!!
« Risposta #5 il: 28 Dicembre 2011, 19:48:50 CET »
0
Ok sono riuscito a creare l'AsyncTask solo ke non continua a funzionare:
Codice (Java): [Seleziona]
Button b = new Button(context);
                b.setText("Trama");
                resto.addView(b);
                b.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                try {
                                        p = new ProgressDialog(context);
                                        p.show();
                                        String link = libro.getLink().trim();
                                        AsynCalcolamiTramaThread a = (AsynCalcolamiTramaThread) new AsynCalcolamiTramaThread(
                                                        v, link).execute();

                                        ttra = a.get();
                                        p.dismiss();
                                        Intent intent = new Intent(v.getContext(),
                                                        VisualizzaTrama.class);
                                        intent.putExtra("trama", ttra);
                                        v.getContext().startActivity(intent);
                                } catch (Exception e) {
                                        e.printStackTrace();
                                }
                        }
                });

Ho provato a creare e distruggere la dialog in OnPreExecute() e OnPostExecute ma mi appare giusto un secondo mentre attendo guardando il pulsante premuto :(

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Progress dialog non appare!!!
« Risposta #6 il: 28 Dicembre 2011, 20:12:09 CET »
0
MI sa che sei recidivo.
Anche il .get dell'asynctask è bloccante.

Fai qualcosa del genere:

Codice (Java): [Seleziona]
class TuoAsyncTask extends AsyncTask<Void, Void, Void> {
     
        String mResult;

        protected Void doInBackground(Void... params) {
                mResult = //fai quello che devi
                return null;
        }


        protected void onPostExecute(...) {
                //fai quello che devi con mResult
        }
 }

La startActivity la devi fare nel onPostExecute.

Offline andreaginobili

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7, Ubuntu
Re:Progress dialog non appare!!!
« Risposta #7 il: 28 Dicembre 2011, 20:42:34 CET »
0
Ricky sei stato davvero tanto gentile, ti ringrazio tanto! Purtroppo non capivo bene cosa intendevi e non riuscivo ad andare avanti.. ora ho ottenuto quello ke dicevo grazie a te... Grazie mille!!! :)