Я работаю со следующим кодом:
override fun getSportList(dCSServiceContext: DCSServiceContext): Single<SportsResponse> {
return scribeService.getNavMenuItems(dCSServiceContext).map { navMenu ->
SportsResponse(navMenu as NavMenu)
}
}
И getNavMenuItems выглядит так:
override fun getNavMenuItems(dCSServiceContext: DCSServiceContext): Observable<NavItem> {
return getItems(getNavItemById(dCSServiceContext), dCSServiceContext)
}
Дело в том, что мне нужно преобразовать этот Observable в Single, я использовал метод toSingle (), вот так:
override fun getSportList(dCSServiceContext: DCSServiceContext): Single<SportsResponse> {
return scribeService.getNavMenuItems(dCSServiceContext).toSingle().map { navMenu ->
SportsResponse(navMenu as NavMenu)
}
}
Но я получаю следующую ошибку:
Observable испустил слишком много элементов, потому что Observable испускает более одного элемента. Точно так же ожидайте, что «Observable не испускает никаких элементов», если Observable пуст.
Любые идеи?
Как упоминал @BobDalgleish, take(1) или first() требуют как минимум 1 элемента. У вас есть пара вариантов RxJava1 Observable::firstOrDefault или, если вы используете RxJava2 (если нет, почему нет), вы можете использовать Observable::firstElement(), который возвращает Maybe. Для меня, если вы не можете вернуть никакие элементы, Maybe более декларативен.
Да, проблема решена, но теперь проблема в том, что я получаю не все предметы, а только первый.




Вы можете использовать оператор
take(1), чтобы ограничить количество отправляемых элементов. Однако это не помогает, если никакие элементы не отправляются.