Android retrofit (Как сделать универсальный класс загрузки данных с сервера)
Коллеги, добрый день!
Столкнулся с проблемой не понимания RxJava. В каждой activity по кнопке или при запуске выполняется запрос на rest сервер.
Пример кода запроса в activity:
CategoryMenuNetworkService service = new CategoryMenuNetworkService(getApplicationContext());
disposable.add(service.getService().getCategoryMenuByDeliveryDate(EXTRA_DELIVERY_DATE)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new BiConsumer<List<CategoryMenu>, Throwable>() {
@Override
public void accept(List<CategoryMenu> dates, Throwable throwable) throws Exception {
if (throwable != null) {
Toast.makeText(CategoryMenuActivity.this, "Data loading error", Toast.LENGTH_SHORT).show();
} else {
adapter.setDates(dates);
}
}
}));
В каждом activity получается дублирование кода и я решил вынести получение данных с сервера в отдельный класс.
Пример отдельного класса для работы с сервером:
public abstract class AbstractDisposable<T extends AbstractModel> {
protected Context context;
protected CompositeDisposable disposable;
protected Single<List<T>> single;
protected List<T> data;
public AbstractDisposable(Context context,
CompositeDisposable disposable,
Single<List<T>> single
) {
this.context = context;
this.disposable = disposable;
this.single = single;
}
public void subscribe() {
disposable.add(single
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe((result, throwable) -> {
if (throwable != null)
Toast.makeText(context, ((HttpException) throwable).message(), Toast.LENGTH_LONG).show();
else
data = result;
}));
}
}
Но тут проблема..
Исполнение запроса идёт асинхронно и я не знаю как дождаться результата в activity откуда был вызван метод subscribe в реализации класса AbstractDisposable
В реализации класса я использую наследование от AbstractDisposable