это ... много вопросов.
Ответ "это зависит".
Покажите свой класс обслуживания (где вы определяете вызов Retrofit).
Вызовы для модификации обычно Single
вместо Observable
, потому что API вернет результат и завершит вызов, поэтому использование наблюдаемого не имеет смысла в этом сценарии (Single is ... просто ОДИН результат или Ошибка).
Один раз:)
Вы наблюдаете за наблюдаемой, когда ожидаете, что указанная наблюдаемая будет излучать значения (через onNext), чтобы вы могли наблюдать за списком вещей и получать его элементы один за другим (например). Или вы можете иметь API, который время от времени генерирует элементы с открытым сокетом; RXJava может помочь вам подписаться на эту эмиссию и иметь дело с каждым элементом (onNext () ..)
Я бы использовал LiveData, если вы не используете RxJava; RX хорош, но он огромен, и если все, что вы делаете, это просто вызываете модификацию Single Apis, я лично не буду беспокоиться о RX. Мощь RX зависит от множества (а иногда и невозможного для понимания или использования) операторов (map, flatmap, switch и т. Д.). и его супер текучий API. Он может делать очень мощные вещи, и для него написано много адаптеров и расширений. Это может быть неправильно использовано и к черту. Это умеренно продвинутый инструмент для очень хороших целей, который я бы не использовал сегодня, если бы у меня не было конкретного случая использования, который действительно хорошо подходит для .
Это не имеет ничего общего с RX и больше связано с вашей архитектурой. Вы называете модификацию в своих методах жизненного цикла? (например, onStart?) или вы вызываете его, когда пользователь взаимодействует (например, нажмите кнопку). В любом случае, RX не имеет никакого отношения ни к одному из них и не будет ничего вызывать, если не будет сказано.
Подробнее
- Если у вас есть API, который возвращает список «
Things
», такой как List<Thing>
, вы можете сделать его Observable<Thing> getThings()
в своем классе обслуживания. Это будет работать. Но это не так, как это будет работать; API, вероятно, отправляет массив (именно поэтому это список), поэтому в действительности он должен выглядеть как Observable<List<Thing>> getThings()
, поэтому, когда вы подписываетесь, он будет выглядеть примерно так (это псевдокод):
api.getThing()
.blah()
.blah()
.subscribe(...)
Подписка будет иметь 3 способа:
onError
onNext
и onComplete
Если вы посмотрите на OnNext
, то это будет выглядеть как onNext(List<Thing> things)
, поэтому каждое излучение из Observable представляет собой LIST вместо того, что вы изначально думаете: "onNext(Thing thing)
, поэтому вы можете добавить things
к списку.
Это не так, как это работает. Если ваш API возвращает список вещей ... вы, вероятно, захотите объявить его следующим образом:
Single<List<Thing>>
потому что ваша подписка будет по существу иметь 2 метода вместо 3:
onError
и onSuccess(List<Thing> things)
(извините, если имена не на 100% точны, я не касался RX в течение нескольких лет). Итак, вы видите, API либо возвращает список, либо ошибку, нет нуля, нет следующего, нет полного; как только вы получите список, ваша подписка никогда не выдаст .
Надеюсь, это поможет вам немного лучше понять, что значит использовать RxJava (это обязательство!)