iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >RxJava中怎么从多个数据源获取数据
  • 909
分享到

RxJava中怎么从多个数据源获取数据

2023-06-17 05:06:48 909人浏览 薄情痞子
摘要

本篇文章给大家分享的是有关RxJava中怎么从多个数据源获取数据,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体的说,计划如下:偶尔的联网操作,只为获取***数据。尽可能快的

本篇文章给大家分享的是有关RxJava中怎么从多个数据源获取数据,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

具体的说,计划如下:

  1. 偶尔的联网操作,只为获取***数据。

  2. 尽可能快的读取到数据(通过获取之前缓存网络数据)。

基本模式

为每一个数据源(网络,磁盘和内存)创建Observable,使用concat()和first()操作符,构造一个简单的实现方式。

concat() 操作符持有多个Observable对象,并将它们按顺序串联成队列。 first() 操作符只从串联队列中取出并发送***个事件。因此,如果使用concat().first(),无论多少个数据源,只有***个事件会被检索出并发送。

// Our sources (left as an exercise for the reader) Observable memory = ...;  Observable disk = ...;  Observable network = ...;  // Retrieve the first source with data Observable source = Observable    .concat(memory, disk, network)   .first();  // Our sources (left as an exercise for the reader) Observablememory = ...;   Observabledisk = ...;   Observablenetwork = ...;  // Retrieve the first source with data Observablesource = Observable     .concat(memory, disk, network)   .first();

这种模式的关键在于concat()操作符只有需要数据的时候才会订阅所有的Observable数据源。由于first()操作符会较早的停止检 索队列,所以,如果存在缓存数据,就没有必要访问较慢的数据源。  也就是说,如果memory返回结果,就不必担心disk和network会被访问。相反地,如果内存和磁盘都没有数据,才执行网络请求。

注意concat()所持有的Observable数据源,是按照一个接一个的顺序被检索的。

持久化数据

很明显,下一步是缓存数据。如果不把网络请求后的结果缓存到磁盘,磁盘访问后的结果缓存到内存,那么这根本不就不叫缓存。接下来要写的代码就是,网络数据的持久化操作。

我的解决方案是,让每个数据源在发送完事件后,都保存或者缓存数据。

Observable networkWithSave = network.doOnNext(new Action1() { @Override public void call(Data data) { saveToDisk(data); cacheInMemory(data); } });  Observable diskWithCache = disk.doOnNext(new Action1() { @Override public void call(Data data) {   cacheInMemory(data); } });   ObservablenetworkWithSave = network.doOnNext(new Action1() { @Overridepublic void call(Datadata) { saveToDisk(data); cacheInMemory(data); } });  ObservablediskWithCache = disk.doOnNext(new Action1() { @Overridepublic void call(Datadata) {   cacheInMemory(data); } });

现在,如果你使用networkWithSave和diskWithCache,数据将会在加载后自动保存。

(这個策略的另一个优势在于networkWithSave和diskWithCache可以在任何地方被使用,不局限于我们的多数据模式下。)

陈旧的数据

不幸的,现在我们保存数据的那些代码,执行的有点过头了。无论数据是否过时,它总是返回相同的数据。我们希望做到,偶尔连接服务器抓取***的数据。

解决方法在于,使用first()操作符进行过滤。就是设置它拒绝接收毫无价值的数据。

Observable source = Observable     .concat(memory, diskWithCache, networkWithSave)     .first(new Func1() {       @Override public Boolean call(Data data) {         return data.isUpToDate();       }     });  Observablesource = Observable     .concat(memory, diskWithCache, networkWithSave)     .first(new Func1() {       @Overridepublic Boolean call(Datadata) {         return data.isUpToDate();       }     });

现在,我们只需要发送被断定为***数据的事件就OK了。因此,只要有一个数据源的数据过期,就继续检索下一个数据源,直到找到***数据为止。

first()和takeFirst()操作符的比较

对于这种设计模式,first()和takeFirst()操作符可以二选其一。

两种调用方式的区别在于,如果所有数据源的数据均过期,没有任何的有效数据作为事件发送,first()会抛出 NoSuchElementException异常(译者注:first()操作符均return  false),而takeFirst()操作符则直接调用完成操作,不会抛出任何异常。

使用哪个操作符,完全取决于是否需要明确处理缺失的数据。

以上就是RxJava中怎么从多个数据源获取数据,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: RxJava中怎么从多个数据源获取数据

本文链接: https://www.lsjlt.com/news/287239.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • RxJava中怎么从多个数据源获取数据
    本篇文章给大家分享的是有关RxJava中怎么从多个数据源获取数据,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体的说,计划如下:偶尔的联网操作,只为获取***数据。尽可能快的...
    99+
    2023-06-17
  • SQL怎么从多个表中获取数据
    要从多个表中获取数据,可以使用 SQL 的 JOIN 操作符。 下面是一个简单的例子,假设我们有两个表:orders 和 custo...
    99+
    2024-04-20
    sql
  • 怎么使用ExecuteScalar从数据库中获取单个数据
    要使用ExecuteScalar从数据库中获取单个数据,需要遵循以下步骤: 创建一个数据库连接对象,并打开连接。 创建一个SQL查...
    99+
    2023-10-23
    数据库
  • 怎么从redis中获取数据
    从 redis 中获取数据的两种主要方法为:get 命令:获取单个键的值。mget 命令:一次获取多个键的值。 从 Redis 中获取数据 方法: 从 Redis 中获取数据有以下两种...
    99+
    2024-04-19
    redis
  • laravel怎么获取多个sql数据
    今天小编给大家分享一下laravel怎么获取多个sql数据的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。使用 Eloquen...
    99+
    2023-07-06
  • mysql中怎么从另一张获取数据
    这期内容当中小编将会给大家带来有关mysql中怎么从另一张获取数据,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 方法一 CREATE TABLE tmp AS SE...
    99+
    2024-04-02
  • R语言中怎么从API获取数据
    要从API获取数据,通常需要使用R语言中的httr包来发送HTTP请求。以下是一个简单的示例代码,演示如何使用httr包从API获取...
    99+
    2024-04-08
    R语言
  • Django怎么从request中获取前端数据
    这篇文章主要介绍Django怎么从request中获取前端数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!go适合做什么go是golang的简称,而golang可以做服务器端开发,且golang很适合做日志处理、数...
    99+
    2023-06-14
  • 如何从redis获取多条数据类型
    要从Redis获取多条数据类型,可以使用以下命令:1. GET:用于获取字符串类型的数据。可以使用单个GET命令来获取多个键的值。例...
    99+
    2023-09-06
    redis
  • MyBatis3源码解析之怎么获取数据源
    这篇文章主要讲解了“MyBatis3源码解析之怎么获取数据源”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MyBatis3源码解析之怎么获取数据源”吧!jdbc再贴一个JDBC运行的测试方法...
    99+
    2023-07-02
  • java怎么从数据库中取出数据
    要从数据库中取出数据,需要使用Java的数据库访问接口(如JDBC)来连接数据库,并执行查询操作。以下是一个简单的Java代码示例,...
    99+
    2023-09-16
    java 数据库
  • React 中怎么获取数据
    今天就跟大家聊聊有关React 中怎么获取数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 使用生命周期方法请求数据应用程序Employees...
    99+
    2024-04-02
  • React中怎么获取数据
    本篇内容介绍了“React中怎么获取数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!   在执行I/O...
    99+
    2024-04-02
  • java怎么获取list中的某个数据
    要从一个List中获取特定的数据,你可以使用get()方法。这个方法接受一个索引作为参数,并返回该索引对应的元素。以下是一个示例代码...
    99+
    2023-08-15
    java list
  • html怎么获取数据库数据
    在 html 中,无法直接访问数据库。需要使用后端技术(如 php、javascript 或 python)从数据库中获取数据。这些技术可以通过建立连接、准备查询、执行查询和检索数据来完...
    99+
    2024-04-05
    mysql python
  • java怎么获取数据库数据
    要获取数据库数据,可以使用Java的JDBC(Java Database Connectivity)技术。下面是一个使用JDBC获取...
    99+
    2023-09-14
    java 数据库
  • PHP中怎么获取显示数据库数据
    这篇文章将为大家详细讲解有关PHP中怎么获取显示数据库数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。PHP获取显示数据库数据函数之 mysql_result()mixed mysql_r...
    99+
    2023-06-17
  • 从 MySQL/Go 表获取行数据
    php小编小新在这篇文章中将向大家介绍如何从MySQL/Go表获取行数据。MySQL是一种流行的关系型数据库管理系统,而Go是一种强大的开发语言。在开发过程中,我们经常需要从数据库中获...
    99+
    2024-02-14
    go语言
  • 使用 PHP 从数据库中获取数据并在 HTML 表中显示数据
    本文将逐步教你如何使用 PHP 获取 MySQL 表并在 HTML 中显示记录。 在 MySQL 中创建数据库和表 首先,我们将创建一个 "demo" 数据库和一个 &qu...
    99+
    2024-02-27
  • java怎么获取数据库元数据
    在Java中,可以使用JDBC(Java Database Connectivity)来获取数据库的元数据。以下是一些示例代码,演示...
    99+
    2023-09-27
    Java 数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作