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


Ответы (0 шт):