我编写了一个类来管理我的应用程序的数据库查询,该类实质上返回所请求的实体。
我遇到的一个常见问题是获取用于查询数据库的AsyncTask的结果。
public class DataManager
{
private AppDatabase mAppDatabase;
public DataManager(Context context)
{
mAppDatabase = AppDatabase.getInstance(context);
}
AsyncTask<Void, Void, StepsPerDay> getTheDaysSteps = new AsyncTask<Void, Void, StepsPerDay>()
{
@Override
protected StepsPerDay doInBackground(Void... voids)
{
return mAppDatabase.stepCountDao().loadStepCountByDate(DateConverter.toEpochDay(LocalDate.now()));
}
@Override
protected void onPostExecute(StepsPerDay stepsPerDay)
{
super.onPostExecute(stepsPerDay);
}
}
public StepsPerDay getTodaysSteps()
{
return getTheDaysSteps.execute();
}
}
我的期望是我可以在任务上调用execute()
,并且onPostExecute()
将返回我的实体,但出现以下错误:
错误:不兼容的类型:AsyncTask不能是转换为StepsPerDay返回getTheDaysSteps.execute();
AsyncTask是异步执行的,因此执行时没有返回值。
但是,您可以通过调用方法get()
等待计算。
尝试在getTodaysSteps中执行get():
public StepsPerDay getTodaysSteps()
{
return getTheDaysSteps.execute().get();
}