Frage

Ich habe das Problem mit der Anzeige von ProgressBar Onitem, die im Optionsmenü ausgewählt wurden. Mein Code ist da:

case R.id.mnuLogout:

                showDialog(Constants.PROGRESS_DIALOG);
                closeOptionsMenu(); 

                             if(MyApp.IsLoggedOut())
                    handler.sendEmptyMessage(Constants.LOGOUT);
                 else
                        handler.sendEmptyMessage(Constants.ERROR_MSG);  

ProgressBar wird nach Abschluss der islogged -Methode angezeigt.

War es hilfreich?

Lösung

Du rufst an get() Gleich nach dem AsyncTask als ausgeführt und verlieren asynchrones Verhalten, weil diese Methode wartet, bis die Aufgabe beendet ist. Sie sollten den gesamten Code in Try/Catch -Block hinzufügen AsyncTask.onPostExecute() Methode und entlassen auch den Dialog aus dieser Methode.

void doLogout() {
    new LogoutTask().execute();
}

void dispatchLogoutFinished() {
    dismissDialog(Constants.PROGRESS_DIALOG);
    if (MyApp.IsLoggedOut()) {
        // do something
    } else {
        // do something else
    }
}

private class LogoutTask extends AsyncTask<Void, Void, Void> {
    protected void onPreExecute() {
        TheActivity.this.showDialog(Constants.PROGRESS_DIALOG);
    }

    protected Void doInBackground(Void... params) {
        return null;
    }

    protected void onPostExecute(Long result) {
        TheActivity.this.dispatchLogoutFinished();
    }
}

Und ich glaube nicht, dass Sie Nachrichten an den Handler senden müssen. Das dispatchLogoutFinished() wird auf dem UI -Thread ausgeführt, sodass keine Synchronisation erforderlich ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top