Подтвердить что ты не робот

RxJava + Retrofit - сделать несколько вызовов

У меня есть четкое понимание Retrofit при использовании синхронных и асинхронных вызовов. Тем не менее, я столкнулся с небольшой проблемой при создании сложной задачи, которую я должен:

  • Сделайте запрос, чтобы получить список ID (около 20-30 ID)
  • После выбора идентификационного списка я хотел бы сделать асинхронные вызовы, чтобы получить информацию о каждом объекте, определенном идентификатором. Я хочу сделать запрос 20-30 в pararrel. Я хочу наблюдать за ним, чтобы обновить интерфейс после того, как мне удастся получить все данные из асинхронных вызовов.

Я прочитал об этой проблеме, и я понял, что RxJava решит мою проблему. Но, честно говоря, мне до сих пор трудно понять весь процесс.

Было бы здорово, если бы я прочитал какой-нибудь правильный пример, чтобы погрузиться в проблему RxJava/RxAndroid.

4b9b3361

Ответ 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/

В этой серии должно быть достаточно материала, чтобы дать вам представление о том, как реализовать свою функцию.