Autore Topic: MySql & ProgressDialog  (Letto 811 volte)

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
MySql & ProgressDialog
« il: 30 Settembre 2011, 16:06:27 CEST »
0
Salve ragazzi,
ho cercato sul forum ma non mi sembra di aver trovato niente che faccia al caso mio...

Vi spiego il mio semplice problema.
Sto sviluppando una APP che interroga un DB remoto. L'interrogazione al DB potrebbe impiegare diversi secondi e vorrei che mentre si esegue la query, l'utente veda la/il (boh.. :-D ) ProgressDialog e, una volta disponibili i dati, li visualizzi eliminando la progressDialog.

Il codice che utilizzo è il seguente:
Codice (Java): [Seleziona]
                setContentView(R.layout.custom_list_view);
               
                ProgressDialog dialog = ProgressDialog.show(this, "", "Caricamento dati in corso...");
               
                String query = "SELECT id, locale, titolo FROM androidTest WHERE id > 0 ORDER BY id DESC";
                String result = sendQuery.send(query);  //metodo che esegue la query

                 ........

                if (!result.contentEquals("")){                
                        //parse json data response
                        try{                                                           
                                bla bla bla
                             }                         
                        }
                        catch(JSONException e){
                                Log.e("log_tag", "Error parsing data "+e.toString());
                        }              
                        dialog.dismiss();                      
                }

Il problema è che in questo modo non riesco a visualizzare la barra,,,

Come possso fare a risolvere?

Grazie...

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:MySql & ProgressDialog
« Risposta #1 il: 05 Ottobre 2011, 17:47:08 CEST »
0
Ragazzi nesuno ha avuto lo stesso mio problema??
Non mi sembra così impossibilie...  :-)

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:MySql & ProgressDialog
« Risposta #2 il: 05 Ottobre 2011, 17:53:12 CEST »
0
Devi eseguire l'operazione in un Thread separato, ad esempio puoi usare un AsyncTask. Qui un tutorial : [facile] Aggiornare la UI da una Thread

In questo modo puoi visualizzare la ProgressDialog, lanciare il Thread e al termine di esso chiudere la ProgressDialog.

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:MySql & ProgressDialog
« Risposta #3 il: 05 Ottobre 2011, 17:55:10 CEST »
0
Grazie...

Lo proverò appena possibile

 ;-)

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:MySql & ProgressDialog
« Risposta #4 il: 06 Ottobre 2011, 17:43:49 CEST »
0
Ho provato la soluzione da te suggerita però non ottengo il risultato sperato...
All'avvio dell'activity faccio questo
Codice (Java): [Seleziona]
setContentView(R.layout.custom_list_view);

Log.i("ACTIVITY", "START");
dialog = ProgressDialog.show(main.this, "", "Caricamento dati in corso...");

loadInBack task = new loadInBack();
task.execute("");

try {
Log.i("TRY", "START");                 
String result = task.get();
Log.i("TRY END", result);
if (!result.contentEquals("0"))
   dialog.dismiss();
} catch (Exception e){
e.printStackTrace();
}

Dentro loadInBack eseguo una query ad un server remoto e converto la risposta in stinga; in questo frattempo vorrei visualizzare la progressDialog ma niente...

Cosa sbaglio?? Considerate che una volta ottenuto il risultato inserisco tutto in una listView e faccio il parse di un risultato con json per cui l'ideale è dismettere la barra alla fine di tutto ma non riesco..
Se volete posto tutta l'activity...

Grazie

Offline Gigiuz

  • Utente normale
  • ***
  • Post: 187
  • Respect: +23
    • Google+
    • gigiuzzo81
    • Gigiuz81
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Note III
  • Play Store ID:
    GGXSoft
  • Sistema operativo:
    Windows 7 64bit, OS X (virtualized), Ubuntu
R: MySql & ProgressDialog
« Risposta #5 il: 06 Ottobre 2011, 23:42:09 CEST »
0
Devi creare e visualizzare il dialog DENTRO l'asynctask, per la precisione devi implementare il metodo onPreExecute() e mostrare il dialog lì.

Inviato dal mio GT-I9100 usando Tapatalk
Hai bisogno di implementare un sistema di "codici seriali di sblocco" nella tua applicazione? Dai un'occhiata alla mia libreria: RemoteUnlocker

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:MySql & ProgressDialog
« Risposta #6 il: 07 Ottobre 2011, 10:04:29 CEST »
0
Niente neanche così..
Io chiamo l'asynkTask così
 
Codice (Java): [Seleziona]
loadInBack task = new loadInBack();
task.execute("");

Il task viene eseguito ma niente della progressDialog...
Di seguito l'asyncTask
Codice (Java): [Seleziona]
private class loadInBack extends AsyncTask <String, String, String> {          
                ProgressDialog dialog;
                @Override protected void onPreExecute(){
                        Log.i("PreEx", "START");
                        dialog = ProgressDialog.show(main.this, null, "Caricamento dati in corso...");
                }

                @Override
                protected String doInBackground(String... params) {
                        Log.i("DoBack", "START");
                        String query = "SELECT id, locale, titolo FROM androidTest WHERE id > 0 ORDER BY id DESC";
                        String result = sendQuery.send(query);         
                        Log.i("DoBack", "END");
                        return result;
                }

                @Override
                protected void onProgressUpdate(String... values) {
                        Log.i("Progress", "START");
                }

                @Override
                protected void onPostExecute(String result) {
                        Log.i("Post", "START");
                        dialog.dismiss();
                }

        }
Il progressDialog non viene per nulla visualizzato. Cosa potrebbe essere??
 :'(

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:MySql & ProgressDialog
« Risposta #7 il: 07 Ottobre 2011, 10:51:13 CEST »
0
Ho anche provato a sostituire il progrtessDialog con un Toast ma niente... Parte l'activity dopo di che, qnd finisce l'interrogazione al db riprende ma non mi visualizza cosa fa nel mentre...nè toast, nè progressDialog...

Dove sbaglio?
Qualcuno sa dove sbaglio o come rimediare??

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:MySql & ProgressDialog
« Risposta #8 il: 07 Ottobre 2011, 11:05:05 CEST »
0
Il codice sembra corretto. Ma quindi la query viene eseguita correttamente ma semplicemente non vedi il ProgressDialog?

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:MySql & ProgressDialog
« Risposta #9 il: 07 Ottobre 2011, 11:08:55 CEST »
0
Si esatto... Vedo anche i risultati e tutto ma durante l'esecuzione della query non visualizzo la progressDialog...

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:MySql & ProgressDialog
« Risposta #10 il: 07 Ottobre 2011, 11:21:29 CEST »
+1
Si esatto... Vedo anche i risultati e tutto ma durante l'esecuzione della query non visualizzo la progressDialog...

Ma le info di logging le vedi?
Cmq, prova a spostare il codice che visualizza il risultato a schermo nel metodo onProgressUpdate:

Codice (Java): [Seleziona]
                @Override
                protected String doInBackground(String... params) {
                        Log.i("DoBack", "START");
                        String query = "SELECT id, locale, titolo FROM androidTest WHERE id > 0 ORDER BY id DESC";
                        String result = sendQuery.send(query);          
                        Log.i("DoBack", "END");
                        publishProgress(result);
                }

                @Override
                protected void onProgressUpdate(String... values) {
                       String result = values[0];
                       //Fai quello che devi con il result
                }

E poi togli la chiamata a task.get();. Secondo me è proprio quest'ultima che scazza perchè effettua una chiamata bloccante e quindi il main thread non ti visualizzare il dialog/toast.


Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:MySql & ProgressDialog
« Risposta #11 il: 07 Ottobre 2011, 11:35:58 CEST »
0
OOOOOOOOK!!
Era il String result = task.get(); che bloccava la visualizzazione.

Io ho letto che per ottenere il risultato dell'asynkTask dovevo chiamare il .get(); adesso come faccio a visualizzare il contenuto della query solo DOPO che l'activeTask è terminato? Esiste un return o get di qualche tipo da chiamare dalla main activity?

Grazie ancora..

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:MySql & ProgressDialog
« Risposta #12 il: 07 Ottobre 2011, 11:38:00 CEST »
0
Io ho letto che per ottenere il risultato dell'asynkTask dovevo chiamare il .get(); adesso come faccio a visualizzare il contenuto della query solo DOPO che l'activeTask è terminato?

Il modo che ti ho suggerito non fa questo?

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:MySql & ProgressDialog
« Risposta #13 il: 07 Ottobre 2011, 11:52:43 CEST »
0
Ah si..grazie...

Ho inserito la visualizzazione dentro onPostExecute ed ora va bene...
Grazie...

Risolvo il topic..