2016-11-12 80 views
1

我把我的頭髮拉出看起來很簡單的事情。當然這只是一個錯字或一些愚蠢的事,但我只是沒有看到它......Android ASyncTask返回類型不匹配

我有一個的AsyncTask類定義的那樣(和它編譯罰款)

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


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

      ... 

      return sections; 
     } 
    } 

在我的應用我嘗試將它稱作爲這樣

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

但是,這並不編譯

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

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

我已經試過分離CR新的SectionalRetrieval實例的實例和調用.execute()。沒有這樣的運氣。它似乎確實認爲execute()實際上是試圖返回SectionalRetrieval的一個實例。

那麼我是怎麼認爲這就是我想要的?

+0

看到這個答案http://stackoverflow.com/a/10972142/3629732但這個不建議性能問題 –

回答

1

您將收到無論您從onPostExecute的參數中的doInBackground返回的任何內容。

您也可以從onPostExecute更新UI。

你可以做execute().get()把它編譯,也許,但我不會建議

+0

嗯,我;米試圖更新用戶界面與此。這是嚴格的網絡調用,我正在做異步。 – JoeHz

+0

然後如果您不需要它,請刪除作業。只需調用execute –

+0

您似乎正在返回某些部分的Arraylist,當然,您希望這些部分最終顯示*,否則,返回任何內容有什麼意義? –

1

所有你需要做的運行是這樣的:

new SectionRetrieval().execute(); 

此方法不返回任何東西。這是一個異步任務,因此沒有返回值。任務完成後,onPostExecute將運行,這就是您處理返回值的位置,而不是您調用execute方法的位置。