如何使用 switchIfEmpty RxJava

2023-12-19

这里的逻辑是,如果数据库中的评级为空,那么我想从 API 中获取它们。我有以下代码:

Observable.from(settingsRatingRepository.getRatingsFromDB())
            .toList()
            .switchIfEmpty(settingsRatingRepository.getSettingsRatingModulesFromAPI())
            .compose(schedulerProvider.getSchedulers())
            .subscribe(ratingsList -> {
                view.loadRatingLevels(ratingsList, hideLocks);
            }, this::handleError);

The getRatingsFromDB()来电返回List<SettingRating>,但 API 调用返回Observable<List<SettingRating>>.

但是,当我对其进行单元测试时,当我从数据库调用传递空列表时,它不会执行 API 调用。有人可以在这件事上帮助我吗?这是我的单元测试代码:

when(mockSettingsRatingsRepository.getRatingsFromDB()).thenReturn(Collections.emptyList());
List<SettingsRating> settingsRatings = MockContentHelper.letRepositoryReturnSettingsRatingsFromApi(mockSettingsRatingsRepository);

settingsParentalPresenter.onViewLoad(false);

verify(mockView).loadRatingLevels(settingsRatings, false);

正如@Kiskae 提到的,事实上我将空列表与空 Observable 混淆了。因此,我使用了以下这是我想要的:

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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 switchIfEmpty RxJava 的相关文章

随机推荐

  • ios 7 dequeueReusableCellWithIdentifier:forIndexPath 方法 - 是否需要 registerClass 方法

    我使用的是ios 7 快问 我有一个工作程序 它使用 dequeueReusableCellWithIdentifier forIndexPath 来显示具有两个不同原型的单元格 我从未使用过 UITableView registerCla
  • 如何在 JPA 实体管理器中锁定整个实体(表)

    我有一个表 从中计算两个日期之间的当前行数 并在同一个表中的 要插入 行中使用结果值 当两个并发请求 例如 A1 和 A2 到来 并且想要同时存储新行 在上面的计算之后 时 我遇到了问题 两者都有相同的结果 例如 10 行 即使A1应该有1
  • Java Properties 对象到 String

    我有一个JavaProperties我从内存中加载的对象String 之前从实际加载到内存中 properties像这样的文件 this propertyFilesCache put file FileUtils fileToString
  • 如何从子目录运行多个 GitHub Actions 工作流程

    我有3个目录 github workflows linters 功能测试 单元测试 在每个目录中我都有多个工作流程 yml文件例如在linters codeQuality yml 我的问题是 当发出拉取请求时 仅执行根目录中的工作流程文件
  • RJS:如何获取 DOM 元素的值和innerHTML

    我想将 DOM 元素的值和 insideHTML 源分配给本地 ruby 变量 然而 在我的方法中似乎我无法利用RJS来完成这个功能 我不知道哪个方法可以实现它 总而言之就是 将js变量值赋给ruby局部变量 怎么做 有限的情况是 page
  • 如何确保 ckeditor 在 jquery-ui 对话框小部件内显示时具有焦点

    我用过CKEDITOR appendTo my div null my string 创建 ckeditor 的实例 没问题 但是 LINK 按钮会打开一个非交互式 LINK 对话框 那么 是否有一些配置设置应该手动设置为 true EDI
  • 在 x 次页面浏览量后运行 JavaScript [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想在用户访问我的网站一定时间或达到一定数量的页面浏览量后显示营销弹出窗口 例如 我希望它在用户浏览完 3 个页面后弹出 我如何使用 Ja
  • PHPEXCEL如何获取单元格值,即使有特殊字符

    当我使用函数 getValue 获取单元格值时 如果单元格包含特殊字符 它会返回 false 是否有任何解决方案来获取内容 即使包含非 UTF 8 字符 我希望在调用 getValue 函数之前解析它们 我将不胜感激任何形式的帮助 objP
  • Java 中的静态/实例初始化程序块按什么顺序运行?

    假设一个项目包含多个类 每个类都有一个静态初始化块 这些块按什么顺序运行 我知道在一个类中 这些块按照它们在代码中出现的顺序运行 我读到它在各个类中都是相同的 但我编写的一些示例代码与此不同 我使用了这段代码 package pkg pub
  • 无法使用 Jquery.post() 发布 JSON 对象

    我在我的 javascript 应用程序中创建了以下对象 poll data active question question div question wrap textarea attr value answers div answer
  • 如何从 iPhone 应用程序中将用户引导至 iPhone 设置主屏幕

    我目前有一个应用程序要求用户维护 VPN 隧道 加载时我检查 VPN 隧道是否可用 我想知道是否有任何方法可以显示UIAlertView单击 确定 后 用户将进入 iPhone 主设置屏幕 以便他们可以打开 VPN 我知道如何存储应用程序特
  • Laravel 4 - 在其他控制器中使用控制器操作?

    好吧 我有一些控制器正在执行我的工作 现在我创建了更多控制器 在新控制器中的某个操作中间 我只记得我已经在旧控制器中编写了正确的代码 所以对于例如在 oldController handyAction 中 some good codez 并
  • SQLite数据库android创建表

    我收到错误 没有这样的表 导致我尝试一切可能让它消失 现在它消失了 但我很困惑 这是我的情况 我需要在应用程序中创建 2 个表 我在每张桌子上放置一个类 它看起来像下面的代码 如果我按照这个操作 当我从 Table2 中提取数据时 它会告诉
  • as3 - 从资产类获取库符号

    我创建了一个 asset swf 我想在其中保留所有符号 然后 我创建了一个执行嵌入的 Assets 类 它看起来像这样 public class Assets extends MovieClip Embed source assets s
  • 在 React 中上传之前获取图像预览

    这里有很多这样的例子 但似乎找不到任何反应 我已经成功地将 vanilla js 转换为 React 但得到an error https stackoverflow com questions 32508191 uncaught typee
  • 如何从 iPhone 中的另一个应用程序运行一个应用程序?

    在某些应用程序上 我看到当一个链接被触摸时 使用 safari 打开链接并从当前应用程序退出 我想使用此功能从其他应用程序运行消息应用程序 我可以这样做吗 如果是的话 怎么办 您需要使用 UIApplication openURL 例如 您
  • 加载 ContextLoaderListener 时出现 ClassNotFoundException

    我正在开发一个网络应用程序 使用 spring 3 0 hibernate 当我尝试在 WAS 7 0 上部署应用程序时 出现错误 无法加载侦听器 org springframework web context ContextLoaderL
  • Actions-on-Google 无法获取 Dialogflow SDK 上的 UPDATES_USER_ID

    我正在设置一个使用推送通知的操作 然而 在 firebase 上我无法保存用户的 UPDATES USER ID 它返回 未定义 我按照指南进行操作link https developers google com actions assis
  • python3 使用自定义属性重新引发异常?

    这是我需要移植的 python2 代码 try do something with file filename except exc type exc inst tb sys exc info exc inst filename filen
  • 如何使用 switchIfEmpty RxJava

    这里的逻辑是 如果数据库中的评级为空 那么我想从 API 中获取它们 我有以下代码 Observable from settingsRatingRepository getRatingsFromDB toList switchIfEmpty