Rückgabewert von AsyncTask-Klasse onPostExecute-Methode

Ok so jetzt habe ich Class A , die einige Spinner enthält, die Werte werden von Class B bevölkert, die AsnycTask die die AsnycTask von einem Web Service packt. In Klasse B kann ich die Werte abrufen und in einem Toast zeigen. Das Problem ist jetzt, wie gebe ich diese Spinner Werte zurück zu Klasse A?

ich habe es versucht

  • So erstellen Sie meine eigene Präferenzklasse
  • Wie erkennt man, ob die Navigationsschublade geöffnet ist?
  • Android: Zeichnen benutzerdefinierte Formen
  • SearchInfo kommt immer null
  • Holen Sie sich Höhe durch Längengrad und Breite in Android
  • So senden Sie E-Mail mit Anhang mit GmailSender in Android
  • Kann OnPostExcecute-Methode in AsyncTask RETURN-Werten?

    Indem sie Class A in Class B und den Wert in einer öffentlichen Variablen der Class A wie unten speichern

     @Override protected void onPostExecute(String result) { classA.classAvariable = result; } 

    Allerdings, wenn ich versuche, die classAvariable zu lesen, classAvariable ich immer eine NullPointer Exception . Scheint wie die Variable wurde nie mit dem Ergebnis zugeordnet. Zum Lesbarkeitszweck musste ich Class B anstelle der Verwendung als Inline-Klasse trennen.

    Irgendwelche Ideen meine Kollegen Java Programmierer?

  • Wie man Knopf-Klick-Ereignis in Android-Studio hinzufügen
  • Wie zentriert man den Titel von CollapsingToolbarLayout?
  • android twitter retrieveRequestToken 401 auf Anfrage Token
  • Bilder, die nicht in Fresko geladen werden
  • Benachrichtigung verschwindet - Android DownloadManager
  • Wie kann ich feststellen, welches Layout von Android in meiner Anwendung ausgewählt wird?
  • 3 Solutions collect form web for “Rückgabewert von AsyncTask-Klasse onPostExecute-Methode”

    Ich denke, du versuchst, Klasse A-Variable zu lesen, bevor es gesetzt wird .. Versuchen Sie es mit Callbacks zu tun .. in der Callback-Funktion übergeben die Werte und aktualisieren Sie Ihre Spinner ..

    Sie können eine interface erstellen, an AsyncTask (im Konstruktor) und dann die Methode in onPostExecute

    Beispielsweise:

    Ihre Schnittstelle:

     public interface OnTaskCompleted{ void onTaskCompleted(values); } 

    Ihre Tätigkeit:

     public YourActivity implements OnTaskCompleted{ //your Activity YourTask task = new YourTask(this); // here is the initalization code for your asyncTask } 

    Und deine AsyncTask:

     public YourTask extends AsyncTask<Object,Object,Object>{ //change Object to required type private OnTaskCompleted listener; public YourTask(OnTaskCompleted listener){ this.listener=listener; } //required methods protected void onPostExecute(Object o){ //your stuff listener.onTaskCompleted(values); } } 

    Problem hier ist, dass, wenn Sie Ihre AsynchTask ausführen, seine doInBackground () -Methode in separaten Thread laufen und der Thread, der diese AsynchTask gestartet hat, gehen vorwärts, da Änderungen an Ihrer Variablen durch AsynchTask nicht auf übergeordneten Thread (wer diese AsynchTask angegeben) sofort.

    Beispiel –

     class MyAsynchTask { doInbackground() { a = 2; } } int a = 5; new MyAsynchTask().execute(); 

    // hier noch ein 5

    Erstellen Sie eine Schnittstelle wie OnCompletRequest() dann übergeben Sie diese an Ihren ClassB-Konstruktor und rufen Sie einfach die Methode in dieser Schnittstelle wie complete(yourList list) in der Methode von onPostExecute(String result)

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