Android从AsyncTask检索结果

问题描述 投票:0回答:1

我编写了一个类来管理我的应用程序的数据库查询,该类实质上返回所请求的实体。

我遇到的一个常见问题是获取用于查询数据库的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();

java android android-asynctask
1个回答
0
投票

AsyncTask是异步执行的,因此执行时没有返回值。

但是,您可以通过调用方法get()等待计算。

尝试在getTodaysSteps中执行get():

public StepsPerDay getTodaysSteps()
{
    return getTheDaysSteps.execute().get();
}
© www.soinside.com 2019 - 2024. All rights reserved.