Autore Topic: "Bloccare" un'Activity mentre invio dati ad un server remoto  (Letto 682 volte)

Offline omix

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
"Bloccare" un'Activity mentre invio dati ad un server remoto
« il: 08 Settembre 2011, 08:39:39 CEST »
0
Ciao ragazzi,

spero possiate darmi una mano, perchè pecco d'inesperienza. ho sviluppato un'applicazione Android che, tra le altre cose, carica e scarica dati da e verso un database MySQL remoto. Queste operazioni richiedono qualche secondo (a seconda della velocità della connessione), e perciò ho scelto di avviare un ProgressBarDialog mentre l'invio è in corso e di chiuderlo appena le operazioni terminano. Il problema è che questo Dialog non ha il tempo di essere visualizzato perchè viene subito chiuso, mentre le operazioni di carico/scarico non sono ancora terminate.
Come posso fare per visualizzare il ProgressBarDialog e mantenerlo visibile finchè le operazioni di rete sono in corso? Devo racchiudere le operazioni di rete in un Service? Devo utilizzare il metodo wait()?
Se poteste darmi un consiglio pratico ed elegante vi sarei grato. Tengo a precisare che l'avvio e la chiusura del ProgressBarDialog funzionerebbero correttamente. Di seguito uno snippet del codice che ho scritto:
Codice (Java): [Seleziona]
private OnClickListener mUpdateButtonListener = new OnClickListener() {
                public void onClick(View v) {
                        if( mUpdateProblemBox.isChecked() || mSendExerciseBox.isChecked() )
                                showDialog(PROGRESSBAR_KEY);

                        if( mUpdateProblemBox.isChecked())
                                updateProblem();
                        if( mSendExerciseBox.isChecked())
                                updateExercises();
                       
                        if(mProgressBarDialog != null)
                                mProgressBarDialog.cancel();
                }


        };

@Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case PROGRESSBAR_KEY: {
                mProgressBarDialog = new ProgressDialog(this);
                mProgressBarDialog.setTitle(getString(R.string.pleaseWait));
                mProgressBarDialog.setMessage(getString(R.string.pleaseWaitDetail));
                mProgressBarDialog.setIndeterminate(true);
                mProgressBarDialog.setCancelable(false);
                return mProgressBarDialog;
            }
        }
        return null;
    }

Vi ringrazio in anticipo,

OmiX

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:"Bloccare" un'Activity mentre invio dati ad un server remoto
« Risposta #1 il: 08 Settembre 2011, 08:50:56 CEST »
0
Non ho ben chiaro il problema (vista anche la parzialità del codice postato), ma e operazioni di scaricamento dovrebbero avvenire in un thread/task separato (ci sono un po' di esempi qua sul forum), per cui il dialog dovrebbe partire all'avvio delle operazioni e chiudersi al termine.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline omix

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Re:"Bloccare" un'Activity mentre invio dati ad un server remoto
« Risposta #2 il: 08 Settembre 2011, 09:08:45 CEST »
0
Ciao Bradipao,

grazie di avermi risposto. Mi rendo conto di essere stato un po' generico, ma avrei dovuto postare veramente parecchie righe di codice per essere preciso. In pratica, ho una dozzina di tabelle nel ContentProvider che ho sviluppato e qualcuna in + sul database remoto MySLQ. Quel che faccio è fare una connessione HTTP per inviare le righe di interesse dall'android al server MySQL e altre chiamate HTTP per prelevare i dati delle tabelle remote e aggiornarle in locale.
Pensavo anche io di usare 2 thread separati (uno per la gestione del carico ed 1 per la gestione dello scarico dei dati), però non ero sicuro se implementarli all'interno di un Service o meno.
Potresti consigliarmi uno degli esempi trattati di cui mi parlavi?

Grazie ancora