У меня имеется поле 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;
}
}