RxJava + Retrofit - сделать несколько вызовов
У меня есть четкое понимание Retrofit при использовании синхронных и асинхронных вызовов. Тем не менее, я столкнулся с небольшой проблемой при создании сложной задачи, которую я должен:
- Сделайте запрос, чтобы получить список ID (около 20-30 ID)
- После выбора идентификационного списка я хотел бы сделать асинхронные вызовы, чтобы получить информацию о каждом объекте, определенном идентификатором. Я хочу сделать запрос 20-30 в pararrel. Я хочу наблюдать за ним, чтобы обновить интерфейс после того, как мне удастся получить все данные из асинхронных вызовов.
Я прочитал об этой проблеме, и я понял, что RxJava решит мою проблему. Но, честно говоря, мне до сих пор трудно понять весь процесс.
Было бы здорово, если бы я прочитал какой-нибудь правильный пример, чтобы погрузиться в проблему RxJava/RxAndroid.
Ответы
Ответ 1
В этом примере вы можете получить список идентификаторов, разделить его на отдельные наблюдаемые, вызвать службу для каждого отдельного идентификатора и получить уведомление n
раз для каждого ответа getDetails
.
service.getIds()
.flatMap(ids -> Observable.from(ids))
.map(id -> service.getDetails(id))
.subscribe(detailed -> updateUi(detailed));
Вы можете использовать функцию Observable.zip
для ожидания нескольких параллельных вызовов, но я не знаю, можете ли вы использовать ее в вызове с переменным размером.
Взгляните на этот пример:
Поддержка Retrofit для Observable также упрощает объединение нескольких вызовов REST. Например, предположим, что у нас есть один вызов, который получает фотографию, а второй - метаданные. Мы можем объединить результаты:
Observable.zip(
service.getUserPhoto(id),
service.getPhotoMetadata(id),
(photo, metadata) -> createPhotoWithData(photo, metadata))
.subscribe(photoWithData -> showPhoto(photoWithData));
Ответ 2
Кажется, что вы действительно ищете информацию или примеры того, как начать работу с RxJava, поэтому я бы предложил вам взглянуть на эту замечательную серию статей Дэна Лью: http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/
В этой серии должно быть достаточно материала, чтобы дать вам представление о том, как реализовать свою функцию.