使用 RxJava 实现存储库模式

2024-02-11

我正在尝试找出一种更好的方法来实现 Android 中 RxJava 中的存储库模式之类的功能。

这是我到目前为止所拥有的:(从here https://gist.github.com/pieces029/5e92f9003fa1a4ebc59b)

public Subscription getData(Observer<Data> observer, boolean refresh) {
    Subscription sub = null;

    Data cached = getCachedData();
    if(cached != null) {
        observer.onNext(cached);
        if(refresh) {
            sub = requestNetwork().subscribe(observer);
        } else {
            observer.onCompleted();
        }
    } else {
        sub = requestNetwork().subscribe(observer);
    }

    return sub;
}

基本上它会检查是否存储了缓存数据,如果没有,它将发出网络请求。它还具有refresh布尔参数强制它始终发出网络请求。

问题(或不是)是,这个函数的调用者需要调用它才会收到Subscription代替Observable,我不能再链接了。

有没有办法让函数返回Observable但仍然有存储库模式?


感谢 akarnokd 指出我本文 http://blog.danlew.net/2015/06/22/loading-data-from-multiple-sources-with-rxjava/作者:丹·卢。

我的最终代码:

public Observable<Data> getData(boolean refresh) {
    Observable<Data> obs = Observable.concat(getCache(), requestNetwork());
    if(!refresh) {
        obs = obs.first(data -> data != null);
    }
    return obs;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 RxJava 实现存储库模式 的相关文章

随机推荐

  • 如何使用 docker-compose 将环境变量设置到 docker 容器中

    我想设置凭据以使用 Google Translate Api 客户端 因此我必须设置环境变量GOOGLE APPLICATION CREDENTIALS该值是凭证文件的路径 来自 Google Cloud 当我被利用的时候docker bu
  • 将未知长度的 char** (c) 转换为 vector (c++) [重复]

    这个问题在这里已经有答案了 如何将 C char 转换为 C 矢量 是否有一些内置功能可以用来做到这一点 或者通过一系列迭代步骤来完成它是否更好 编辑 由于各种原因 C 数组中的元素数量未知 我可以将其作为另一个参数传递 但这绝对有必要吗
  • 如何在反应中使用复选框形式?

    有两个组件container and presenter 下面的代码显示单个复选框状态变为 true 并且另一个复选框也正在更新 那么 如何处理具有状态的多个复选框 容器 export default class ApplyFormCont
  • 为什么点击设置innerHTML会在Chrome上触发两个解析事件?

    使用Chrome开发者工具中的时间轴 我使用了这一小段代码来记录事件内部HTML
  • 如何分发 Android 库

    我一直在为 android 库项目旋转一个 jar 并将这个 jar 包含在我的其他应用程序中 但在developer android com上 http developer android com tools projects index
  • REST API 404:URI 错误或缺少资源?

    我正在构建 REST API 但遇到了问题 设计 REST API 时公认的做法似乎是 如果请求的资源不存在 则返回 404 然而 对我来说 这增加了不必要的歧义 传统上 HTTP 404 与错误的 URI 相关 所以实际上我们是说 要么你
  • 将 ILMerge 与 .NET 4 库结合使用

    两个问题 1 基本 NET 程序集不包含在 ILMerged 程序集中 从 NET 3 5 Visual Studio 2008 升级到 NET 4 Visual Studio 2010 后 我在构建后使用 ILMerge 时遇到问题 我有
  • 以列表作为参数的 defun

    我正在尝试选择 Lisp 作为我的新语言 但我在解决如何让函数的一部分作用于传递给它的列表的每个元素上时遇到了一些问题 为了学习如何解决这个问题 我试图编写一个相当基本的除法形式 当列表的一个元素为 0 时不会发出声音 而是只返回 0 de
  • Java 中 String 享元实现的最佳替代方案

    我的应用程序是多线程的 具有密集的字符串处理 我们遇到内存消耗过多的情况 分析表明这是由字符串数据引起的 我认为使用某种享元模式实现甚至缓存会极大地提高内存消耗 我确信字符串经常是重复的 尽管我在这方面没有任何硬数据 我研究过 Java C
  • 如何在关闭网页时丢弃会话变量?

    我们在开发网页时遵循的一个流程 是将页面绑定到一个或多个会话变量 这些会话变量仅用于该页面 用于保存当前处理对象 因此在关闭页面时不需要它们 如何在关闭页面时丢弃这些会话变量 关于该技术或如何解决该问题有什么建议吗 离开 关闭页面时不会引发
  • 如何以编程方式监视 docker 容器是否退出?

    我在 VM 主机上运行多个命名的 docker 容器 200 多个 我有一个管理器脚本 代码 应该从主机管理容器 我想知道是否有任何基于事件的机制可以在容器停止 失败时收到通知 这样我就可以重新启动已停止的容器 我能想到的一个解决方案是定期
  • 何时使用枚举、类或标签?

    假设您有一个特定页面类型的页面 例如普通页面 帐户页面等 页面由 Page 对象表示 我的问题是 如何为页面分配页面类型 我看到这些选项 通过使用 Page 对象中设置的 PageType 枚举 通过使用 PageType 类 并在 Pag
  • 如何使用每列以前的值填充缺失的信息? [复制]

    这个问题在这里已经有答案了 可能的重复 用最新的非 NA 值替换 NA https stackoverflow com questions 7735647 replacing nas with latest non na value 如何使
  • 如何更改node.js中process.env.PORT的值?

    我想改变的值process env PORT 我怎样才能做到这一点 我运行的是 Ubuntu 12 04 仅运行一次 在 unix shell 提示符下 PORT 1234 node app js 更永久 export PORT 1234
  • 如何使用asyncio下载s3存储桶上的文件

    我使用以下代码下载 s3 存储桶中的所有文件 def main bucket name destination dir bucket boto3 resource s3 Bucket bucket name for obj in bucke
  • 在服务中运行 Android TTS

    我试图让 Android 的 TTS 在服务中运行 但我不知道为什么它不起作用 它可以编译 不会崩溃 但它就是不起作用 不过 Toast 通知确实有效 package alarm test import android app Servic
  • 我可以使用 UML 来建模网站导航吗

    我可以使用 UML 对网站导航进行建模吗 如果是的话 有人给我一些书籍 链接以供参考 网站的 UML 之类的 如果不是的话 有哪些工具可以实现这一点 基本上我是一名程序员 当我设计以前的网站时 我只是在纸上勾勒出不同的页面设计想法 然后选择
  • 运行单元测试时禁用温斯顿日志记录?

    在执行节点模块的单元测试时是否可以有选择地禁用 Winston 日志记录 理想情况下 我希望在应用程序运行时进行日志记录以提供信息和调试目的 但在运行测试时不要使演示单元测试结果混乱 我对 winston 的使用是在我的模块内部的 如下所示
  • 无法将类型 void 隐式转换为对象。 .NET MVC 部分视图结果

    我有以下控制器操作 ChildActionOnly public virtual PartialViewResult ListActions int id var actions meetingActionRepository GetAll
  • 使用 RxJava 实现存储库模式

    我正在尝试找出一种更好的方法来实现 Android 中 RxJava 中的存储库模式之类的功能 这是我到目前为止所拥有的 从here https gist github com pieces029 5e92f9003fa1a4ebc59b