2017-02-01 11 views
9

, когда мы используем retrofit2 для выполнения вызовов в режиме API с помощью Rx. Каков наилучший подход к использованию, Single или Observable?Rx 2 Android, что лучше Single или Observable для звонков api?

public interface ApiService{ 

Single<Data> getDataFromServer(); 

Observable<Data> getDataFromServer(); 
} 
+1

Если бы мне пришлось выбирать, я бы использовать одинарные, – Blackbelt

+0

Спасибо, я согласен с тем, как мы только потреблять один элемент, однако я хотел бы получить больше отзывов о выборе одного или другого. –

ответ

10

Я предложил бы использовать Single, поскольку это более точное представление потока данных: вы делаете запрос на сервер и вы получите либо одну эмиссию данных ИЛИ ошибка:

Single:  onSubscribe (onSuccess | onError)? 

Для Observable теоретически вы можете получить несколько выбросов данных И ошибка

Observable: onSubscribe onNext? (onCompleted | onError)? 

Однако, если вы используете , я бы предложил использовать Maybe вместо Single. Разница между этими двумя заключается в том, что Maybe обрабатывает также случай, когда вы получаете ответ от сервера, но не содержит тела.

Maybe:  onSubscribe (onSuccess | onCompleted | onError)? 
+1

Интересно, я ничего не знал о «возможно», кажется важным элементом, который нужно иметь в виду. FYI: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#maybe –

+0

Да, это совершенно новый, более похожий на * для справок в будущем *. Также FYI: https://medium.com/@manuelvicnt/rxjava2-android-mvvm-lifecycle-app-structure-with-retrofit-2-cf903849f49e – Lamorak

5

Разница между Observable и Single довольно семантический. Когда вы объявляете что-то Single, вы говорите, что это наблюдаемое будет производить только одно значение, а не ряд значений.

Использование правильных семантических типов - лучший способ документировать ваш API.

+0

Не соответствует ли это больше одному отклику, а не единому объекту? – Omaraf

 Смежные вопросы

  • Нет связанных вопросов^_^