【问题标题】:Android Room database RxJava flatmap chain requestsAndroid Room 数据库 RxJava flatmap 链请求
【发布时间】:2019-04-20 08:07:28
【问题描述】:

我想买一双:

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) 返回 Single&lt;User&gt;
  • messagesViewModel.getFromUser(user.getId()) 返回 Single&lt;List&lt;Message&gt;&gt;

flatmap 的 rx 文档和方法定义非常混乱。我怎样才能做到这一点?还是有其他方法可以做到这一点?

有趣的是,它似乎可以与 Observable 一起使用:

mDisposable.add(
                Observable.just(1)
                .flatMap(item -> Observable.just(2), Pair::new)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe());

【问题讨论】:

    标签: android rx-java android-room flatmap


    【解决方案1】:

    根据文档,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表达式

    userViewModel.getUser(id)
        .flatMap(user -> messagesViewModel.getFromUser(user.getId())
                                 .map(messages -> new Pair<>(user, messages)))
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
    

    【讨论】:

    • 谢谢。是的,我检查了单函数的 BiFunction 没有这样的方法签名。我想在 flatMap 中使用 map 是 Single 的唯一方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 2016-08-15
    相关资源
    最近更新 更多