Android получает информацию из базы данных Room о потоке внутри асинхронной задачи - PullRequest
0 голосов
/ 28 августа 2018

Я хочу получить некоторые данные из своей базы данных Room, находясь внутри задачи Async. Таким образом, я выполняю некоторый код в асинхронной задаче, и мне нужна некоторая информация из базы данных Room. Я не использую оперативные данные, поэтому я должен получить информацию в отдельном потоке и мне нужен немедленный доступ к данным, например:

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

Я пытался сделать это, используя 2 асинхронные задачи, одна из которых (задача B) возвращает результат. Поэтому я запускаю задачу A, которая затем вызывает задачу B с execute (). Get (), которая заставляет задачу A ждать результата, но метод doInBackground задачи B никогда не вызывается (я думаю, потому что задача 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);
    }
}

и задача A не продолжается после вызова jobListRepository.getAllWithLimit, поэтому я думаю, что я знаю проблему, но мне не совсем понятно решение, спасибо за любую помощь

EDIT Только что нашел работу менеджера поцарапай что мне нужен пул потоков

...