Как решить подписки PublishSubject, MutableLiveData, RxJava и Disposable в kotlin и java?

Котлайн раздел

1. Я написал BaseViewModel.kt, используя приведенную ниже конфигурацию.

val ioDisposables: CompositeDisposable
val inputs: PublishSubject<Response<List<X>>>
val outputs: MutableLiveData<Response<List<X>>>

init {
    outputs = rx.toLiveData(inputs, ioDisposables)
}

override fun onCleared() {
    ioDisposables.clear()
    super.onCleared()
}

fun observeOutputs(owner: LifecycleOwner, observer: Observer<Response<List<X>>>) {
    multipleOwners.add(owner)
    outputs.reObserve(owner, observer)
}

2. RxMapper содержит динамические привязки для toLiveData () api, как показано ниже:

fun <T> toLiveData(subject: PublishSubject<T>, disposables: CompositeDisposable): MutableLiveData<T> {
    val data = MutableLiveData<T>()
    val disposable = subject.subscribe({ data.setValue(it) })
    disposables.add(disposable)
    return data
} 

3. LiveDataMapper предназначен для reObserve () api

fun <T> LiveData<T>.reObserve(owner: LifecycleOwner, observer: Observer<T>) {
    removeObserver(observer)
    observe(owner, observer)
} 

Раздел Java - из класса Fragments

4. Подписка на выходы в первый раз

    vm = ViewModelProviders.of(this, factory).get(FlagViewModel.class);
    vm.observeOutputs(this, this::processResponse);

Этот код работает нормально в первый раз, но он заполняет повторяющийся набор данных во второй раз. :( :(

Пробовали ли вы использовать LiveData-ReactiveStreams, предоставляемые AndroidX, вместо создания собственной функции toLiveData, которая каждый раз создает новую подписку и никогда не удаляет ее? :п

EpicPandaForce 17.01.2019 15:19

Нет, не видел. Не могли бы вы объяснить подводные камни вышеперечисленных кодов? Или какое улучшение есть в androidx?

Roman 18.01.2019 11:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
572
0

Другие вопросы по теме