Основная идея реактивных расширений состоит в том, чтобы использовать наблюдение за потоками событий и своевременную обработку.
Так что на самом деле, если вам нужно получить данные простым способом, я бы сказал, что вам не нужноRxJava2 вообще.Тем не менее, если вы хотите придерживаться реактивного подхода, поток данных должен прослушиваться .
Все типы RxJava2 предоставляют метод subscribe
, который "уведомляет" источник данныхпо своей природе это лениво, так как здесь есть наблюдатель, который хочет получить данные, поэтому весь поток обработки данных, описанный с помощью операторов RxJava2, станет живым.
Самый безболезненный подход - изменить код HomeActivity's
наthis:
vm.getUsers()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(userListAdapter::populateWithNewDataSet);
, при условии, что у адаптера будет упомянутый метод, который будет обновлять набор данных пользовательского интерфейса, используя что-то вроде notifyDataSetChanged()
(или DiffUtil
, например) внутри.
Благодаря этому теперь наблюдается источник данных, и каждый раз, когда происходит обновление, пользовательский интерфейс будет заполняться самыми последними данными.
PS: я только что продемонстрировал самый простой способ сделать это, но этоРазработчик должен разместить код, связанный с RxJava: будь то ViewModel
, Activity
или даже какой-то другой компонент.RxJava - это удобный инструмент, который может сделать сложный асинхронный поток простым, но проблема с RxJava возникает, когда от него зависит вся база кода.Затем кодовая база может быстро стать неуправляемой, хрупкой и жесткой, если инструмент использовался в неподходящем месте.