Size: a a a

StartAndroid Ru RxJava

2020 July 15

VP

Vitaly Peryatin in StartAndroid Ru RxJava
Ivan Pestov
Всем привет возник вопрос по поводу связки RxJava и Retrofit. Есть запрос на сервер по типу getElements(page: Int): Observable<Elements>. Как можно увидеть из сигнатуры на каждый такой запрос он возращает новый Observable на который нужно заново подписываться. Собственно сам вопрос как можно сделать так, чтобы можно было один раз подписаться на Observable в который помещались ответы от сервера по вызову этого метода
А зачем это нужно, если сервер больше одного раза не ответит?
Тут корректнее написать Single вместо Observable
источник

Y

YorkIsMine in StartAndroid Ru RxJava
А как вообще Observable влияет на перфоманс в отличии от Single?
источник

VP

Vitaly Peryatin in StartAndroid Ru RxJava
YorkIsMine
А как вообще Observable влияет на перфоманс в отличии от Single?
Я не шарю так глубоко за Rx и не могу сказать влияет ли это на Perfomance
Но с точки зрения восприятия и чистоты коды запросы из сети как правило Single, запросы из БД как правило Maybe, когда у репозитория есть какая-то логика кеширования, он как правило данные отдает порциями и в нем содержится Flowable/Observable
источник

VP

Vitaly Peryatin in StartAndroid Ru RxJava
YorkIsMine
А как вообще Observable влияет на перфоманс в отличии от Single?
Ну и если было бы понимание, что запрос из сети как правило Single, то не было бы подобных вопросов, которые задавали выше
источник
2020 July 16

V

Vadim in StartAndroid Ru RxJava
Почему такая цепочка не завершается?

fun foo(): Completable {
 return flowable.flatMapCompletable {
   Completable.complete()
 }
}


А вот эта завершается

fun foo(): Completable {
 return flowable.flatMapSingle {
   Completable.complete().andThen(Single.just(Unit))
 }
}
источник

V

Vadim in StartAndroid Ru RxJava
Можно как-то обойтись без andThen(Single.just(Unit)) ?
источник

V

Vadim in StartAndroid Ru RxJava
и напрямую из flatMapCompletable вернуть результат, чтобы цепочка шла дальше
источник

l

lenar in StartAndroid Ru RxJava
Vadim
Почему такая цепочка не завершается?

fun foo(): Completable {
 return flowable.flatMapCompletable {
   Completable.complete()
 }
}


А вот эта завершается

fun foo(): Completable {
 return flowable.flatMapSingle {
   Completable.complete().andThen(Single.just(Unit))
 }
}
она завершается. вот пример https://pastebin.com/mUA9zE7d
источник

l

lenar in StartAndroid Ru RxJava
ты скорее всего на вход этим методам передаешь разные flowable, один из которых завершается ,а второй нет
источник

RA

Rustam Akhmedov in StartAndroid Ru RxJava
Парни знает кто-то статью с примером использования room ili retrofit  в связке с rxjava ну или код если есть
источник

M

Mikhail Android in StartAndroid Ru RxJava
Вот в этом туториале есть урок отдельный по переходу от колбэков к rxJava в retrofit https://androidschool.ru/courses/android-retrofit-and-gson/
источник

RA

Rustam Akhmedov in StartAndroid Ru RxJava
Спасибо
источник
2020 July 21

F

François Leclercq in StartAndroid Ru RxJava
Всем привет. Что-то ничего в голову кроме костылей не приходит, может сообщество чего посоветует...

            .flatMap {
               if (condition) {
                   Completable.fromAction{ ... }.andThen(Observable.empty<SomeObj>().toSingle())
               } else {
                   pushesRepository.getPushesFromServer(SomeObj()).doOnSuccess {...}
               }
           }.flatMap {
               userRepository.sync()
                       .doOnSuccess {...}
           }

После этого кода еще длинная цепочка выполняется. Задача: нужно чтобы если condition == true цепочка дальше не выполнялась. У меня получился только такой костыль, но я помню что кидаение ошибок (а тут де-факто оно и есть) - неправильный способ завершать последовательность, если таковым образом предусмотрено ее завершение. Сделать все Completabl-ами я не могу, т.к. есть doOnSuccess у !condition и цепочка предусмотрена в flatMap -ах Single
источник

A

Alohagoha in StartAndroid Ru RxJava
François Leclercq
Всем привет. Что-то ничего в голову кроме костылей не приходит, может сообщество чего посоветует...

            .flatMap {
               if (condition) {
                   Completable.fromAction{ ... }.andThen(Observable.empty<SomeObj>().toSingle())
               } else {
                   pushesRepository.getPushesFromServer(SomeObj()).doOnSuccess {...}
               }
           }.flatMap {
               userRepository.sync()
                       .doOnSuccess {...}
           }

После этого кода еще длинная цепочка выполняется. Задача: нужно чтобы если condition == true цепочка дальше не выполнялась. У меня получился только такой костыль, но я помню что кидаение ошибок (а тут де-факто оно и есть) - неправильный способ завершать последовательность, если таковым образом предусмотрено ее завершение. Сделать все Completabl-ами я не могу, т.к. есть doOnSuccess у !condition и цепочка предусмотрена в flatMap -ах Single
Ну подожди есть же оператор фильтр и после фильтра ничего лишнего не выполняется. ?🤔
источник

F

François Leclercq in StartAndroid Ru RxJava
Alohagoha
Ну подожди есть же оператор фильтр и после фильтра ничего лишнего не выполняется. ?🤔
Я что-то упустил или у Сингла таки есть фильтр?
источник

F

François Leclercq in StartAndroid Ru RxJava
takeUntil и прочие тоже не предлагать, они у обсерваблов только
источник

A

Alohagoha in StartAndroid Ru RxJava
François Leclercq
takeUntil и прочие тоже не предлагать, они у обсерваблов только
Тогда может просто у Completable вызвать .complete во flatMap?
источник

A

Alohagoha in StartAndroid Ru RxJava
Может использовать Maybe или Observable если может вернуться что-то или ничего или ошибка.
источник

F

François Leclercq in StartAndroid Ru RxJava
Alohagoha
Может использовать Maybe или Observable если может вернуться что-то или ничего или ошибка.
rx1  - мейби нет
источник

F

François Leclercq in StartAndroid Ru RxJava
Alohagoha
Тогда может просто у Completable вызвать .complete во flatMap?
нужно чтобы синглы шли дальше по цепочке, не комплитаблы, плохо читаете условия
источник