AsyncTask onPostExecute wird niemals aufgerufen

Ich bin mir nicht sicher, was ich falsch mache, aber onPostExecute wird niemals angerufen.

Das onPreExecute (), doInBackground (..) wird ausgelöst, aber aus irgendeinem Grund wird das onPostExecute niemals angerufen.

Vielen Dank im Voraus!

Dave

  private class PostToOpenFeint extends AsyncTask<Void, Void, Void> { /* * (non-Javadoc) * * @see android.os.AsyncTask#doInBackground(Params[]) */ @Override protected Void doInBackground(Void... params) { // does all the work here return null; } /* * (non-Javadoc) * * @see android.os.AsyncTask#onPostExecute(java.lang.Object) */ @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub super.onPostExecute(result); Toast.makeText(MainScreen.this, "Done syncing", Toast.LENGTH_LONG).show(); } /* * (non-Javadoc) * * @see android.os.AsyncTask#onPreExecute() */ @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); Toast.makeText(MainScreen.this, "About to sync all your scores", Toast.LENGTH_LONG).show(); } 

Schau hinein, das war es, was ich beobachten konnte. Zum Beispiel, wenn ich diesen Anruf platziere:

  new PostToOpenFeint.execute(); 

Gleich nach dem Erzählen der Aktivität, dann geht alles gut. Wenn ich diesen Anruf in einem Knopf-Listener sage.

 settingsButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { new PostToOpenFeint.execute(); } }); 

Die onPostExecute () wird niemals angerufen, nicht sicher, was ich falsch mache Die Beschränkung, die ich gelesen habe, war, dies aus UI Thread zu rufen und ich rufe es aus UI Thread.

  • Activity.finishAffinity () vs Intent.FLAG_ACTIVITY_NEW_TASK | Absicht.FLAG_ACTIVITY_CLEAR_TASK
  • Android EditText AutoFocus zum nächsten EditText wenn bei maxlength
  • Android marshmallow dynamische Berechtigungsänderung tötet alle Anwendungsprozesse
  • Machen Sie die Standard-Android Emulator schneller
  • Wie schließt man eine cpp-Datei im experimentellen Grad aus?
  • FacebookSdk.sdkInitialize (Kontext) ist veraltet
  • 8 Solutions collect form web for “AsyncTask onPostExecute wird niemals aufgerufen”

    Ich hatte jetzt ein ähnliches Problem. Ich erweitere AsyncTask<Integer,Integer,Integer> und meine onPostExecute Methode sah aus wie:

     protected void onPostExecute(int result) 

    Das schien mir ok zu sein, aber dann bin ich wieder ein .NET Kerl als ein Java-Typ. Ich habe es geändert an:

     protected void onPostExecute(Integer result) 

    Weil aus irgendeinem Grund Java denkt, dass es einen Unterschied zwischen int und Integer ?

    Ich denke, dass Ihr Problem ist, dass Sie den Rückgabetyp als void in Ihrem erklären:

     extends<Void,Void,Void> 

    Das bedeutet keine params, kein Fortschritt und kein Ergebnis. Wenn du etwas ausführen willst, wenn es fertig ist, denke ich, du musst ihm irgendwie Wert geben wie und ganzzahlig oder boolesch.

    Wenn Sie Ihre Verlängerungen ändern:

     <Void,Void,Integer> 

    Jetzt ist Ihr passing keine params, nicht veröffentlichen keine Fortschritte, sondern geben einen Wert zurück. Ändern Sie Ihre onPostExecute Methode, um eine Integer zu akzeptieren:

     protected void onPostExecute(Integer result) 

    Dann ändern Sie die Rückkehr in Ihrer doInBackground Methode zu etwas wie:

     return 1; 

    Dann sollte es für dich ausführen.

    Es gibt noch einen Gotcha über AsyncTasks, dass ich gerade den halben Tag verbracht habe:

    Die AsyncTask-Klasse muss auf dem UI-Thread geladen werden. Dies geschieht automatisch ab JELLY_BEAN.

    Sagt die Dokumentation. Auf Lebkuchen (und wahrscheinlich vorher), angesichts der richtigen Umstände, führt dies zu onPostExecute nicht ausgeführt werden. Die Lösung ist aber einfach, nur ein

     new MyAsyncTask(); 

    Früh im UI-Thread, so dass die Klasse geladen wird, bevor irgendetwas im Hintergrund unabsichtlich laden kann.

    Ich hatte eine statische Funktion in meiner AsyncTask-Unterklasse von einem Hintergrund-Thread verwendet, der je nach dem Timing angerufen wurde, bevor irgendetwas auf dem UI-Thread die AsyncTask-Unterklasse und den Bingo einen schönen Heisenbug benutzt hat.

    (Bear mit mir für die Beantwortung dieser alten, bereits beantworteten Frage, aber ich habe nicht finden, dass tidbit der Info überall, und das ist meine erste Post)

    Beachten Sie , dass bei der Abbruch der Aufgabe über cancel() wird onPostExecute() nicht aufgerufen. Ziemlich logisch, aber einfach mit Blick auf einen Anruf zu dieser Methode hatte mich stumped.

    Mein Problem war, dass irgendwie habe ich nicht @Override die onPostExecute-Methode richtig. Ich habe das durch Klicken mit der rechten Maustaste-> source-> Override \ Implement-Methode behoben.

    Hofft, dass es jemandem hilft

    Vielleicht geht der Code in doInBackground () niemals zurück?

    Fügen Sie einfach diese Code zu Ihrer Aktivität hinzu. Es ist das Problem der Async-Task nicht initialisiert, wie es sein soll.

      try { Class.forName("android.os.AsyncTask"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

    Ändern Sie einfach die Parameter in onPostExecute

     @Override protected void onPostExecute(Void unused) { ...} 

    Nun sollte die Methode aufgerufen werden.

    Verwenden Sie einfach die richtigen Parameter in onPostExecute, verwenden Sie public void onPostExecute (Boolean Antwort) {} anstelle von public void onPostExecute (boolean Antwort) {} das löste mein Problem

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.