Room & Rxjava

作者: _蘇芳_ | 来源:发表于2018-01-12 19:27 被阅读81次

Room是google在Architecture Components
提出的一个持久化库,可以异步查询返回LiveData和Rxjava里的Maybe,Single,Flowable,其中LiveData和Flowable是可观测的查询。它们允许自动从数据库更新数据,从而刷新UI。

可以在UserDao里这么写,

@Query(“SELECT * FROM Users WHERE id = :userId”)
User getUserById(String userId);

但他有两个缺点:
1、这是同步的,所以会阻塞。
2、当user被修改的时候,我们总是需要手动调用这个方法。

在返回Maybe或Single的时候,确保subscribeOn调用了Scheduler的不同线程,而不是AndroidSchedulers.mainThread()

若想加上room对rxjava的支持,需要在build.gradle中添加以下内容

// RxJava support for Room
implementation “android.arch.persistence.room:rxjava2:1.0.0-alpha5”
// Testing support
androidTestImplementation “android.arch.core:core-testing:1.0.0-alpha5”

Maybe

@Query(“SELECT * FROM Users WHERE id = :userId”)
Maybe<User> getUserById(String userId);

来说说发生了啥:
1、当数据库里没有这条数据的时候,Maybe会直接onComplete()
2、当有这条数据的时候,Maybe会触发onSuccess,然后会正常的onComplete()
3、当数据在MaybeonCompleted()后进行了更新,那就什么都不会发生了

Single

@Query(“SELECT * FROM Users WHERE id = :userId”)
Single<User> getUserById(String userId);

1、当数据库里没有这条数据的时候,Single会直接onError(EmptyResultSetException.class)
2、当有这条数据的时候,Single会触发onSuccess
3、当数据在Single.onCompleted()后进行了更新,那就什么都不会发生了,自流被关闭后。

Flowable

@Query(“SELECT * FROM Users WHERE id = :userId”)
Flowable<User> getUserById(String userId);

1、当数据库里没有这条数据的时候,Flowable不会发射,当然也就不会有onNextonError
2、当有这条数据的时候,Flowable会触发onNext
3、任何时候数据被更新了,Flowable会自动发射来让你用最新的数据来更新UI。

Room and RxJava , google写了个简单的 例子

over~

相关文章

  • Room & Rxjava

    Room是google在Architecture Components提出的一个持久化库,可以异步查询返回Live...

  • RxJava & Room

    译文:原文地址 更少的公式化代码,更少的SQL语句的编译时间,更少的基于SQL的异步观测查询语句的编译时间--- ...

  • Kotlin & Room & Rxjava(一

    前言 最近更新AndroidStudio 至Canary 8 版本了,看样子AS3.0和android O的发布很...

  • Kotlin & Room & Rxjava(二

    Entity Entity的实例对应的是对象模型数据库中数据表的一行数据,其数据结构自然就是对应着表结构. 而这种...

  • RxJava相关

    Room ? RxJava使用RxJava操作数据库 RxPermissionsRxJava实现的Android运...

  • Room 🔗 RxJava

    原文地址在Room中使用RxJava进行查询 更少的模板代码,编译时SQL查询检查,除此之外,异步和响应式查询能力...

  • Database with Room using Rxjava

    Google发布了新的开源库Room,他是属于数据库层的,可以让我们顺畅的数据库,更多相关信息可以移步官方文档。在...

  • 网页设计 - 收藏集 - 掘金

    免费且又精致的 HTML/CSS 站点模板 - 前端 - 掘金&amp;amp;amp;amp;amp;l...

  • LifeCycle & Room & dataB

    这个 sample 的简单需求: 获取数据库中的数据, 并展示为 list, 点击后进入详情页 数据库设计 1.e...

  • Android Room RxJava Update/Delet

    Room的基本使用有很多文章可以查看,简单推荐一个 https://www.jianshu.com/p/72eea...

网友评论

    本文标题:Room & Rxjava

    本文链接:https://www.haomeiwen.com/subject/kmzfoxtx.html