Страницы

Поиск по вопросам

пятница, 3 января 2020 г.

Правильное выполнение запроса RxJava+Retrofit

#android #rest #retrofit #rxjava


Здравствуйте. Недавно начал разбираться с RxJava. Что-то тяжело пока дается...
Есть сервер на котором есть приватные чаты(тет-а-тет) и групповые.
Посредством Rest запроса на сервер нужно выудить следующую инфу оттуда:
Все существующие чаты и диалоги:

Observable> chats = apiService.getChats();
Observable> dialogs = apiService.getDialogs();


Объекты Chat и Dialog содержат переменные:

int unreadMessagesCount (количество непрочитанных сообщений);
int id (по этому id запрашивается список сообщений из чата)


Запросы на список сообщений

Observable> dialogMessages = apiService.getDialogMessages(String id);
Observable> chatMessages = apiService.getChatMessages(String id);


Как в этом случае более грамотно составить запросы используя RxJava, чтобы опросить
все чаты и диалоги на предмет новых сообщений и затем получить эти сообщения в один список?
    


Ответы

Ответ 1



Например как-то так: Получаем массив чатов. Преобразуем массив оных в очередь объектов Chat. Получаем детали каждого. Результат преобразовываем обратно в массив:. apiService.getChats() .from(Observable::from) .flatMap(chat -> apiService.getChatMessages(chat.id)) .toList() .subscribe(System::out); Если без лямбд, то from(Observable::from) можно переписать вот такой ужасной конструкцией: .flatMap(new Func1, Observable>() { @Override public Observable call(List chats) { return Observable.from(chats); } })

Комментариев нет:

Отправить комментарий