@giksen

Как правильно сделать несколько запросов используя Retrofit в паттерне MVVM?

У меня имеется поле LiveData> mAllCompanies , хранящая необходимые мне объекты. Для каждого такого объекта мне необходимо сделать запрос , получить данные и присвоить значение нового списка данных полю mAllCompanies. Проблема состоит в том, что запускается много потоков и не получается получить то, что необходимо.
API позволяет получать только по одному объекту необходимого класса за раз.
NetworkService - класс, реализующий логику работы retrofit

private static class getAllCompaniesProfilesTask extends AsyncTask<List<Company>,Void,List<Company>>{
        private NetworkService networkService;
        List<Company> companiesToGet;
        List<Company> companiesToReturn;
        getAllCompaniesProfilesTask(NetworkService networkService) {
            this.networkService = networkService;
        }
        @Override
        protected List<Company> doInBackground(List<Company>... lists) {
            companiesToGet = lists[0];
            companiesToReturn = new ArrayList<>();
            for(int i = 0;i < companiesToGet.size(); ++i){
                networkService.getJSONApi()
                        .getCompanyProfileBySymbol(companiesToGet.get(i).ticker)
                        .enqueue(new Callback<Company>() {
                            @Override
                            public void onResponse(Call<Company> call, Response<Company> response) {
                                companiesToReturn.add(response.body());
                            }
                            @Override
                            public void onFailure(Call<Company> call, Throwable t) {
                                System.out.println("Failed to get data from network");
                            }
                        });
            }
            companiesToGet.clear();
            companiesToGet.addAll(companiesToReturn);
            return companiesToGet;
        }
    }
  • Вопрос задан
  • 38 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы