我用一些看起来非常简单的事情来拉我的头发。当然这只是一个错字或一些愚蠢的东西,但我只是没有看到它......
我有一个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的实例。
那么我是如何让它认为我想要的呢?
答案 0 :(得分:1)
您可以在onPostExecute的参数中收到从doInBackground返回的任何内容。
您也可以从onPostExecute更新UI。
你可以execute().get()
进行编译,但是我不建议
答案 1 :(得分:1)
您需要做的就是:
new SectionRetrieval().execute();
此方法不返回任何内容。这是一个异步任务,因此没有返回值。任务完成后,onPostExecute
将运行,这是您处理返回值的位置,而不是您调用execute方法的位置。