Maybe
@Query(“SELECT * FROM Users WHERE id = :userId”)
Maybe<User> getUserById(String userId);
发生了什么呢?
1.若数据库中没有用户,那么Maybe就会被complete(RxJava中概念)
2.若数据库中有一个用户,那么Maybe就会触发onSuccess方法并且被complete
3.若数据库中用户信息在Maybe被complete之后被更新了,啥都不会发生
Single
@Query(“SELECT * FROM Users WHERE id = :userId”)
Single<User> getUserById(String userId);
就会发生这些事情:
1.若数据库中没有用户,那么Single就会触发onError(EmptyResultSetException.class)
2.若数据库中有一个用户,那么Single就会触发onSuccess
3.若数据库中用户信息在Single.onComplete调用之后被更新了,啥都不会发生,因为数据流已经完成了
Flowable
@Query(“SELECT * FROM Users WHERE id = :userId”)
Flowable<User> getUserById(String userId);
Flowable会这样运行:
1.若数据库中没有用户,那么Flowable就不会发射事件,既不运行onNext,也不运行onError
2.若数据库中有一个用户,那么Flowable就会触发onNext
3.若数据库中用户信息被更新了,Flowable就会自动发射事件,允许你根据更新的数据来更新UI界面