0

Ich versuche, etwas Ruhezeit in meiner Asynctask hinzuzufügen, weil mein ProgressDialog jetzt zu schnell ist, wenn nicht viele Daten geladen werden.Fehler bei der Verwendung von Thread.sleep in einer Asynctask

Ich versuchte dies:

@Override 
protected Boolean doInBackground(Void... params) { 
    try { 
     progressDialog.setMessage("Loading first thing..."); 
     firstThing(); 
     progressDialog.incrementProgressBy(1); 
     Thread.sleep(500); 
     //...repeat above four lines a few times for second, third, fourth thing, etc 
     return true; 
    } 
    catch (Exception e) { 
     Log.e("MyClassName", "There was an error: " + e); 
     return false; 
    } 
} 

Ich erhalte die Fehlermeldung „Nur das Original-Thread, das eine Ansicht erstellt wurde, kann seine Ansichten berühren.“

+0

Sie aktualisieren UI-Ansichten außerhalb Android-Hauptthread. DoInBackground wird in einem anderen Thread ausgeführt, sodass Sie die Ansichten nicht aktualisieren können. Wenn Sie also die Ansicht aktualisieren möchten, sollten Sie onPreExectute, onPostExcture oder onProgressUpdate verwenden. Überprüfen Sie https://developer.android.com/reference/android/os/AsyncTask.html – AndroidRuntimeException

+0

Ich habe diese außer Kraft gesetzt, ja, ich habe gerade nicht die hier – KaliMa

Antwort

2

Sie müssen onProgressUpdate() sowie doInBackground() überschreiben.

  // do this before asynctask.execute(); 
      progressDialog.setMessage("Loading first thing..."); 


@Override 
protected Boolean doInBackground(Void... params) { 
    try { 
     firstThing(); 
     Thread.sleep(500); 
     // this method invokes onProgressUpdate on the UI thread 
     publishProgress(); 
     return true; 
    } 
    catch (Exception e) { 
     Log.e("MyClassName", "There was an error: " + e); 
     return false; 
    } 
} 

@Override 
protected void onProgressUpdate(Void... params) { 
    progressDialog.incrementProgressBy(1); 
} 
+0

Sie können auch vorstellen, heruntergeladene Größe als Prozentsatz wie das anzuzeigen . publishProgress (Prozent); und pDialog.incrementProgressBy (Parameter [0]); – uguboz

+0

Wie soll publishProgress() aussehen? – KaliMa

+0

Ich glaube, es ist eine eingebaute Funktion. Wie auch immer, nachdem ich diese Änderung gemacht habe, bekomme ich immer noch denselben Fehler. Oder vielleicht liegt es daran, dass ich die Nachricht im Hintergrund-Thread setze. Wie ändere ich die Nachricht in Abhängigkeit davon, wo ich mich im Ladevorgang befinde? – KaliMa