Android在异步任务内的线程上从Room数据库获取信息

时间:2018-08-28 16:19:08

标签: android-asynctask return android-room

我想在异步任务中从Room数据库中获取一些数据。 因此,我正在异步任务中运行一些代码,我需要从Room数据库中获取一些信息,而我没有使用实时数据,因此必须在单独的线程中获取信息,并且需要立即访问数据,例如:< / p>

//get data
ArrrayList<Job> jobList = databaseCall.getList();
//use data
for(Job job : jobList)

我试图使用2个异步任务来执行此操作,其中一个(任务B)返回结果。因此,我开始运行任务A,然后使用execute()。get()调用任务B,这使任务A等待结果,但从未调用任务B的doInBackground方法(我认为是因为任务A正在运行),任何人都可以将我指向正确的方向,我应该怎么做。

这里有一些代码,只是因为,谁知道..

我如何创建列表

List<JobList> jobListArrayList = jobListRepository.getAllWithLimit(Constants.JOB_LISTS_TO_RETURN);

jobListRepository方法

public List<JobList> getAllWithLimit(int i) {
    Log.d(TAG,"getAllWithLimit");
    try {
        return new getJobListsWithLimit(jobDao, i).execute().get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
    return null;
}

异步任务(用于保持同步的任务B)数据库调用,如从未提及的doInBackground调用

private static class getJobListsWithLimit extends AsyncTask<Void, Void, 
List<JobList>> {

    private JobDao mDao;
    private int limit;

    getJobListsWithLimit(JobDao dao, int limit) {
        this.mDao = dao;
        this.limit = limit;
        Log.d(TAG,"async task");
    }

    @Override
    protected List<JobList> doInBackground(Void... params) {
        Log.d(TAG,"doInBackground");
        return mDao.getAllJobListsWithLimit(limit);
    }
}

并且在调用jobListRepository.getAllWithLimit之后任务A不会继续,所以我想我知道问题所在,但是我对解决方案不太清楚,谢谢您的帮助

编辑 刚找到工作经理 我需要一个线程池

0 个答案:

没有答案