Autore Topic: Dialog menu chooser in AsyncTask  (Letto 590 volte)

Offline Fenex86

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: 0
    • Google+
    • davide-vallicella/43/325/74
    • Mostra profilo
    • Libretto universitario
  • Dispositivo Android:
    Emulatore - 2.3
  • Sistema operativo:
    W7 - Kubuntu 11.10
Dialog menu chooser in AsyncTask
« il: 02 Maggio 2012, 15:09:33 CEST »
0
Salve,

ho questa necessità ovvero nel mio asyncTask effettuo un login e un controllo in parsing sulla pagina restituita se la pagina restituita contiene un determinato campo devo far sceglire all'utente tra 3 ipotesi possibili quindi avrei la necessità di sospendere il task mentre visualizzo il menu e finchè non si fa la propria scelta poi dopo aver effettuato la scelta far ripartire il task da dove si era fermato...

Codice (Java): [Seleziona]
static class LoginTask extends AsyncTask<String, Void, Boolean> {

                private Login activity = null;

                public LoginTask(Login activity) {
                        attach(activity);
                }

                @Override
                protected void onPostExecute(final Boolean success) {
                        if (DEBUG)
                                Log.d(TAG, "onPostExecute()");
                        super.onPostExecute(success);
                        if (activity != null) {
                                activity.onTaskCompleted(success);
                        }
                }

                @Override
                protected Boolean doInBackground(final String... params) {
                        if (!activity.cm.isLogged() && !isCancelled()) {
                                try {
                                        activity.cm.authenticate();
                                } catch (Exception e) {
                                        activity.showErrorMessage(e.getMessage());
                                }
                        }
                       
                        String url = Utils.TARGET_HOME;
                        if(params != null && params.length > 0 && !isCancelled())
                                url = params[0];
                       
                       
                        String page_HTML = activity.cm.connection(ConnectionManager.ESSE3, url, null);

                        if (isMultiID(page_HTML)) {
                                selectID(page_HTML);  //<---qui dovrei visualizzare la Dialog a menu una volta scelto vorrei riprendere da qui |
                                //return false;                                                                                                                                                       L
                        }                                                                                                                                                                                   V

                        return activity.cm.isLogged() && !isCancelled() ? activity
                                        .initPage(url) : false;
                }

                @Override
                protected void onCancelled() {
                        if (DEBUG)
                                Log.d(TAG, "onCancelled()");
                        super.onCancelled();
                        if (activity != null)
                                activity.onTaskCompleted(false);
                }

                void attach(Login activity) {
                        if (DEBUG)
                                Log.d(TAG, "attach");
                        this.activity = activity;
                }

                void detach() {
                        activity = null;
                }
        }

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:Dialog menu chooser in AsyncTask
« Risposta #1 il: 02 Maggio 2012, 15:34:04 CEST »
0
Dovessi farlo io, cercherei di avere due asynctask distinti da avviare in sequenza con la dialog tra il primo ed il secondo. Perchè sospendere un AsyncTask per un tempo non noto può creare non pochi problemi (nel senso che l'utente medio di solito ne fa di cotte e di crude in questi casi).
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Fenex86

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: 0
    • Google+
    • davide-vallicella/43/325/74
    • Mostra profilo
    • Libretto universitario
  • Dispositivo Android:
    Emulatore - 2.3
  • Sistema operativo:
    W7 - Kubuntu 11.10
Re:Dialog menu chooser in AsyncTask
« Risposta #2 il: 02 Maggio 2012, 15:36:54 CEST »
0
mmm ok...potrei anche usare lo stesso volendo aggiungendo dei controlli...mmm ok grazie per la risposta speravo ci fosse un metodo più fico va be ;)

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:Dialog menu chooser in AsyncTask
« Risposta #3 il: 02 Maggio 2012, 15:51:59 CEST »
0
mmm ok...potrei anche usare lo stesso volendo aggiungendo dei controlli...

Se usi lo stesso, quando devi eventualmente farlo ripartire, devi controllare sia sempre vivo (il sistema potrebbe averlo distrutto per recuperare risorse, oppure per uno sleep, oppure per una rotazione dell'orientazione) ed eventualmente ricrearlo con i parametri opportuni.

L'ideale è far girare gli AsyncTask solo per il tempo strettamente necessario e poi farli morire al più presto.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Fenex86

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: 0
    • Google+
    • davide-vallicella/43/325/74
    • Mostra profilo
    • Libretto universitario
  • Dispositivo Android:
    Emulatore - 2.3
  • Sistema operativo:
    W7 - Kubuntu 11.10
Re:Dialog menu chooser in AsyncTask
« Risposta #4 il: 02 Maggio 2012, 15:57:05 CEST »
0
Si grazie ma infatti quando lo riutilizzo rifaccio la new  e quando lo termino lo metto a null

Questo è il metodo che eventualmente richiamerò qual'ora devo visualizzare il menu

Codice (Java): [Seleziona]
private void onTaskCompleted(boolean success) {
                if (success)
                        loginHandler.sendEmptyMessage(SUCCESS);

                removeDialog(PROGRESS_ID);
                enableLogin();
                loginTask = null;
                Log.d("tok", "Task.onComplete");
        }

Codice (Java): [Seleziona]
private void doLogin() {
                if (Utils.isNetworkAvailable(Login.this)) {
                        disableLogin();
                        showDialog(PROGRESS_ID);
                        cm = ConnectionManager.getInstance();
                        cm.setCredentials(username, password);
                        loginTask = (LoginTask) new LoginTask(this).execute();
                } else {
                        showErrorMessage("Connessione NON attiva!");
                }
        }

se devo visualizzare il menu restituisco false dal task così non entro nel if e metto a null il task visualizzo il menu e quando scelgo rifaccio doLogin()