2016-11-12 2 views
1

Ich ziehe mir die Haare aus, was aussieht, als wäre es eine sehr einfache Sache. Sicherlich ist dies nur ein Tippfehler oder etwas dumm ist, aber ich bin nur sehen es nicht ...Android ASyncTask Rückgabetyp stimmt nicht überein

Ich habe eine AsyncTask Klasse als solche definiert (und es kompiliert fein)

public class SectionRetrieval extends AsyncTask<Void, Void, List<Section>> 
    { 


     @Override 
     protected List<Section> doInBackground(Void... voids) 
     {   
      List<Section> sections = new ArrayList<Section>(); 

      ... 

      return sections; 
     } 
    } 

In meiner app I versuchen sie es als solche

List<Section> sections = new SectionRetrieval().execute(); 

zu nennen, aber diese nicht kompiliert

Error:(472, 63) Gradle: error: incompatible types: 

AsyncTask<Void,Void,List<Section>> cannot be converted to List<Section> 

ich habe versucht Trennung des cr der neuen SectionalRetrieval-Instanz und dem Aufruf der .execute(). Kein solches Glück. Es scheint wirklich zu denken, dass execute() wirklich versucht, eine Instanz von SectionalRetrieval zurückzugeben.

Also, wie habe ich es denken lassen, dass das was ich wollte?

+0

siehe diese Antwort http://StackOverflow.com/A/10972142/3629732 aber diese eine nicht zu Leistungsproblemen empfohlen –

Antwort

1

Sie erhalten, was Sie von doInBackground im Parameter onPostExecute zurückgeben.

Sie aktualisieren die Benutzeroberfläche auch von onPostExecute.

Sie könnten execute().get() tun, um es zu haben zu kompilieren, wahrscheinlich, aber ich würde nicht empfehlen, dass

+0

Nun, ich versuche nicht, die Benutzeroberfläche mit diesem zu aktualisieren. Es ist streng genommen ein Netzwerkanruf, den ich asynchron mache. – JoeHz

+0

Entfernen Sie dann die Zuweisung, wenn Sie sie nicht benötigen. Ruf einfach an execute –

+0

Du scheinst einen Arraylist von einigen Sektionen zurückzugeben, also möchtest du, dass diese * schließlich * angezeigt werden, ansonsten, was ist der Sinn irgendetwas zurückzugeben? –

1

Alles, was Sie tun müssen, um diese auszuführen ist:

new SectionRetrieval().execute(); 

Diese Methode nichts zurückliefert . Es ist eine asynchrone Aufgabe, also kein Rückgabewert. Sobald die Aufgabe erledigt ist, wird onPostExecute ausgeführt, und dort behandeln Sie die Rückgabewerte, nicht an der Stelle, an der Sie die execute-Methode aufrufen.

Verwandte Themen