如何使用 switchIfEmpty RxJava [英] How to use switchIfEmpty RxJava
问题描述
这里的逻辑是,如果数据库中的评分为空,那么我想从 API 中获取它们.我有以下代码:
The logic here is that if the ratings in the database are empty, then I want to get them from the API. I have the following code:
Observable.from(settingsRatingRepository.getRatingsFromDB())
.toList()
.switchIfEmpty(settingsRatingRepository.getSettingsRatingModulesFromAPI())
.compose(schedulerProvider.getSchedulers())
.subscribe(ratingsList -> {
view.loadRatingLevels(ratingsList, hideLocks);
}, this::handleError);
getRatingsFromDB()
调用返回 List
,但 API 调用返回 Observable
.>
The getRatingsFromDB()
call returns List<SettingRating>
, but the API call returns Observable<List<SettingRating>>
.
但是,当我对此进行单元测试时,当我从数据库调用中传递一个空列表时,它不会执行 API 调用.有人可以帮我解决这个问题.这是我的单元测试代码:
However, when I unit test this, when I pass an empty list from the database call, it does not execute the API call. Can someone pls help me in this matter. This is my unit test code:
when(mockSettingsRatingsRepository.getRatingsFromDB()).thenReturn(Collections.emptyList());
List<SettingsRating> settingsRatings = MockContentHelper.letRepositoryReturnSettingsRatingsFromApi(mockSettingsRatingsRepository);
settingsParentalPresenter.onViewLoad(false);
verify(mockView).loadRatingLevels(settingsRatings, false);
推荐答案
正如@Kiskae 所提到的,事实上我将空列表与空的 Observable 混淆了.因此,我使用了我想要的以下内容:
As @Kiskae mentioned, it's the fact that I am confusing an empty list with an empty Observable. Therefore, I have used the following which is what I want:
public void onViewLoad(boolean hideLocks) {
Observable.just(settingsRatingRepository.getRatingsFromDB())
.flatMap(settingsRatings -> {
if (settingsRatings.isEmpty()) {
return settingsRatingRepository.getSettingsRatingModules();
} else {
return Observable.just(settingsRatings);
}
})
.compose(schedulerProvider.getSchedulers())
.subscribe(ratingsList -> {
view.loadRatingLevels(ratingsList, hideLocks);
}, this::handleError);
}
这篇关于如何使用 switchIfEmpty RxJava的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!