Kann die OnPostExcecute-Methode in AsyncTask RETURN-Werten?

Ich entwickle eine Android-Anwendung, die die Verwendung von erfordertAsyncTask für Netzwerkverbindung. Ich habe es vom Hauptthread aus aufgerufen. Also diedoInBackground Die Methode wird ausgeführt und kehrt dann zuonPostExecute Methode. Nachdem die onPostExecute-Methode ausgeführt wurde, möchte ich einen Wert an die Aktivität zurückgeben, von der aus er aufgerufen wurde, da einige Vorgänge in dieser bestimmten Aktivität ausgeführt werden müssen, für die der von der onPostExecute-Methode zurückgegebene Wert erforderlich ist. Wie löse ich das? Wie gebe ich einen Wert von onPostExecute zurück?

Danke im Voraus

Antworten auf die Frage(3)

um den Wert von wiederherzustellenAsyncTask

<code>public class MainActivity extends Activity {
    public String retunnumfromAsyncTask;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layouttest);
        new Asyntask(this).execute();
    }

    public class Asyntask extends AsyncTask<Void, Void, String> {
        private final Context Asyntaskcontext;

        public Asyntask(Context context){
            Asyntaskcontext = context;
        }

        @Override
        protected void onPostExecute(String result) {
            MainActivity mainactivity = (MainActivity) Asyntaskcontext;
            mainactivity.retunnumfromAsyncTask = result;       
            super.onPostExecute(result);
        }
    }
}
</code>

ktivität und deklarieren Sie dann den Wert, den Sie zurückgeben möchten, als global. War es hilfreich für dich?

Lösung für das Problem

wie der Name schon sagt, asynchron mit dem UI-Thread ausgeführt. Die onPostExecute-Methode wird zu einem späteren Zeitpunkt nach Abschluss von doInBackground aufgerufen. Es ist uns egal, wann die onPostExecute-Methode aufgerufen wird (tatsächlich gibt es keine Möglichkeit, dies zum Zeitpunkt der Projekterstellung mitzuteilen). Es ist uns nur wichtig, dass die onPostExecute-Methode zu einem späteren Zeitpunkt vom zugrunde liegenden Framework ordnungsgemäß aufgerufen wird. Der Zweck der onPostExecute-Methode ist also die Verarbeitung des vom Worker-Thread zurückgegebenen Ergebnisses. Aus diesem Grund ist das einzige Argument der onPostExecute-Methode das Ergebnis, das von der doInBackground-Methode zurückgegeben wird.

Ich muss eine Operation in dieser bestimmten Aktivität ausführen, für die der von der onPostExecute-Methode zurückgegebene Wert erforderlich ist. Wie löse ich das?

Natürlich können Sie in der Activity-Klasse einige Instanzvariablen erstellen (oder Listener-Muster verwenden), um das Ergebnis zu speichern, wenn es in der onPostExecute-Methode zurückgegeben und bereit ist. Das Problem ist, dass Sie zum Zeitpunkt der Projekterstellung nie wissen, wann dieses Ergebnis außerhalb der onPostExecute-Methode verfügbar ist, da es tatsächlich zur Laufzeit der App ermittelt wird. Es sei denn, Sie schreiben einen Wartemechanismus, der das Ergebnis kontinuierlich abfragt, was den Vorteil von AsyncTask, beispielsweise der integrierten API, einbüßtAsyncTask.get () Dadurch wird AsyncTask synchron mit dem UI-Thread ausgeführt und das Ergebnis an die Aktivität zurückgegeben.

Am besten ändern Sie Ihr Design und verschieben den Operationscode, der das von AsyncTask zurückgegebene Ergebnis erfordert, in die onPostExecute-Methode. hoffe das hilft.

 yorkw13. Apr. 2012, 02:14
@ManJan, ich habe kürzlich eine ähnliche Frage beantwortethier Erklären Sie weitere Details zur Funktionsweise von AsyncTask mit dem UI-Thread. Hoffe, dies hilft.

Ihre Antwort auf die Frage