Android 房间数据库 RxJava 平面图链请求
Android Room database RxJava flatmap chain requests
我想买一双:
Pair<User,List<Messages>>
我读了这篇文章:RxJava patterns
我基本上是先争取用户。然后一旦我有了用户,我想获取该用户的所有消息:
mDisposable.add(
userViewModel.getUser(id)
.flatMap(user -> messagesViewModel.getFromUser(user.getId()),(user, messages) -> new Pair<>(user, messages)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(//update view based on user and messages);
代码不工作,它抱怨传递给 flatmap 的参数。
userViewModel.getUser(id)
returns一个Single<User>
messagesViewModel.getFromUser(user.getId())
returns一个Single<List<Message>>
flatmap 的 rx 文档和方法定义非常混乱。我怎样才能做到这一点?还是有其他方法可以做到这一点?
有趣的是它似乎与 Observable 一起工作:
mDisposable.add(
Observable.just(1)
.flatMap(item -> Observable.just(2), Pair::new)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe());
根据文档,Observable
具有 flatMap()
函数,其签名类似于
public final <U,R> Observable<R> flatMap(Function<? super T,? extends ObservableSource<? extends U>> mapper,
BiFunction<? super T,? super U,? extends R> resultSelector)
这正是您在最新案例中使用的。但是 Single
只有 flatMap()
签名像
public final <R> Single<R> flatMap(Function<? super T,? extends SingleSource<? extends R>> mapper)
这就是为什么你不能随心所欲地直接使用它的原因。如果你还想用Single
解决问题,你可以用next expression
userViewModel.getUser(id)
.flatMap(user -> messagesViewModel.getFromUser(user.getId())
.map(messages -> new Pair<>(user, messages)))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
我想买一双:
Pair<User,List<Messages>>
我读了这篇文章:RxJava patterns
我基本上是先争取用户。然后一旦我有了用户,我想获取该用户的所有消息:
mDisposable.add(
userViewModel.getUser(id)
.flatMap(user -> messagesViewModel.getFromUser(user.getId()),(user, messages) -> new Pair<>(user, messages)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(//update view based on user and messages);
代码不工作,它抱怨传递给 flatmap 的参数。
userViewModel.getUser(id)
returns一个Single<User>
messagesViewModel.getFromUser(user.getId())
returns一个Single<List<Message>>
flatmap 的 rx 文档和方法定义非常混乱。我怎样才能做到这一点?还是有其他方法可以做到这一点?
有趣的是它似乎与 Observable 一起工作:
mDisposable.add(
Observable.just(1)
.flatMap(item -> Observable.just(2), Pair::new)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe());
根据文档,Observable
具有 flatMap()
函数,其签名类似于
public final <U,R> Observable<R> flatMap(Function<? super T,? extends ObservableSource<? extends U>> mapper,
BiFunction<? super T,? super U,? extends R> resultSelector)
这正是您在最新案例中使用的。但是 Single
只有 flatMap()
签名像
public final <R> Single<R> flatMap(Function<? super T,? extends SingleSource<? extends R>> mapper)
这就是为什么你不能随心所欲地直接使用它的原因。如果你还想用Single
解决问题,你可以用next expression
userViewModel.getUser(id)
.flatMap(user -> messagesViewModel.getFromUser(user.getId())
.map(messages -> new Pair<>(user, messages)))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())