Kann nicht Handler Innengewinde erstellen, die Looper.prepare () innerhalb AsyncTask für ProgressDialog genannt hat nicht

StackOverflow https://stackoverflow.com/questions/3614663

Frage

Ich verstehe nicht, warum ich diesen Fehler. Ich verwende AsyncTask einige Prozesse im Hintergrund laufen zu lassen.

ich habe:

protected void onPreExecute() 
{
    connectionProgressDialog = new ProgressDialog(SetPreference.this);
    connectionProgressDialog.setCancelable(true);
    connectionProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    connectionProgressDialog.setMessage("Connecting to site...");
    connectionProgressDialog.show();

    downloadSpinnerProgressDialog = new ProgressDialog(SetPreference.this);
    downloadSpinnerProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    downloadSpinnerProgressDialog.setMessage("Downloading wallpaper...");
}

Wenn ich in doInBackground() erhalten abhängig von einer Bedingung I:

[...]    
connectionProgressDialog.dismiss();
downloadSpinnerProgressDialog.show();
[...]

Jedes Mal, wenn ich downloadSpinnerProgressDialog.show() versuchen erhalte ich den Fehler.

Alle Ideen, Jungs?

War es hilfreich?

Lösung

Das Verfahren show() muss aus dem User Interface (UI) Thread , während doInBackground() läuft auf verschiedenen Thread aufgerufen werden, die ist der Hauptgrund, warum AsyncTask entworfen wurde.

Sie haben show() rufen entweder in onProgressUpdate() oder in onPostExecute().

Zum Beispiel:

class ExampleTask extends AsyncTask<String, String, String> {

    // Your onPreExecute method.

    @Override
    protected String doInBackground(String... params) {
        // Your code.
        if (condition_is_true) {
            this.publishProgress("Show the dialog");
        }
        return "Result";
    }

    @Override
    protected void onProgressUpdate(String... values) {
        super.onProgressUpdate(values);
        connectionProgressDialog.dismiss();
        downloadSpinnerProgressDialog.show();
    }
}

Andere Tipps

Ich hatte ein ähnliches Problem, aber diese Frage aus der Lektüre ich dachte, ich auf UI-Thread ausgeführt werden konnte:

YourActivity.this.runOnUiThread(new Runnable() {
    public void run() {
        alertDialog.show();
    }
});

Es scheint für mich, den Trick zu tun.

Ich hatte eine harte Zeit zu, diese Arbeit zu machen, die Lösung war für mich sowohl hyui und konstantin Antworten zu verwenden,

class ExampleTask extends AsyncTask<String, String, String> {

// Your onPreExecute method.

@Override
protected String doInBackground(String... params) {
    // Your code.
    if (condition_is_true) {
        this.publishProgress("Show the dialog");
    }
    return "Result";
}

@Override
protected void onProgressUpdate(String... values) {

    super.onProgressUpdate(values);
    YourActivity.this.runOnUiThread(new Runnable() {
       public void run() {
           alertDialog.show();
       }
     });
 }

}
final Handler handler = new Handler() {
        @Override
        public void handleMessage(final Message msgs) {
        //write your code hear which give error
        }
        }

new Thread(new Runnable() {
    @Override
    public void run() {
    handler.sendEmptyMessage(1);
        //this will call handleMessage function and hendal all error
    }
    }).start();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top