Страницы

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

вторник, 22 января 2019 г.

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

Здравствуйте. Недавно начал разбираться с 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, чтобы опросить все чаты и диалоги на предмет новых сообщений и затем получить эти сообщения в один список?


Ответ

Например как-то так:
Получаем массив чатов. Преобразуем массив оных в очередь объектов 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); } })

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

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