Android ASyncTask返回类型不匹配

时间:2016-11-12 04:50:42

标签: java android 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>

我尝试分离新的SectionalRetrieval实例的创建和调用.execute()。没有这样的运气。它似乎确实认为execute()实际上是在尝试返回SectionalRetrieval的实例。

那么我是如何让它认为我想要的呢?

2 个答案:

答案 0 :(得分:1)

您可以在onPostExecute的参数中收到从doInBackground返回的任何内容。

您也可以从onPostExecute更新UI。

你可以execute().get()进行编译,但是我不建议

答案 1 :(得分:1)

您需要做的就是:

new SectionRetrieval().execute();

此方法不返回任何内容。这是一个异步任务,因此没有返回值。任务完成后,onPostExecute将运行,这是您处理返回值的位置,而不是您调用execute方法的位置。