android - RxJava2 如何将 Single 链接到 Completable,以便在 Completable 完成时订阅它

标签 android rx-java2

我如何将 Single 链接到 Completable,以便在 Completable 完成时订阅它?

repository.downloadUser() 是 Single。

根据调试,似乎此方法中的 Single 被调用但从未订阅(即 downloadUser() 方法被调用但它创建的 Single 中没有代码被调用)。

问题是,如何使用原始订阅者在链中订阅 repository.downloadUser() Single?我错过了什么或做错了什么?或者这是不可能的?

fun login(username: String, password: String): Completable {    
    return repository.login(username, password)
        .andThen {
            repository.downloadUser() // This is a Single
                .flatMap { downloadedUser ->
                    user = downloadedUser
                    it.toSingle()
                }
                // When I get this part working there are other things I want to 
                // chain as well.
}

编辑:我可能会将其分成两个调用,一个用于 Completable,另一个用于其余部分。但是,如果有人知道,知道这是否可能仍然是一件好事......

最佳答案

很确定这是您对大括号的使用。 Kotlin 认为您正在调用 RxJava 方法

public final Completable andThen(CompletableSource next) {
   return concatWith(next);
}

表示返回类型是Completable,但您希望它是Single。你需要的是

repository.login(username, password)
    .andThen(repository.downloadUser())
    .flatmap { ... }

关于android - RxJava2 如何将 Single 链接到 Completable,以便在 Completable 完成时订阅它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50636749/

相关文章:

java - 卡住了设置 Room 以与 RxJava 一起使用 : access to database may potentially lock the UI

java - 在对话框上查找按钮时出现空指针异常

Android软键盘首先显示数字 View

java - 将自定义布局添加到 ListView 行

java - 如何限制Single.Zip并行度?

android - Room - SELECT 查询、获取或默认

java - RxJava 中的 n 元笛卡尔积

Android - 通用类型作为 ObservableTransformer 中的表达式

android - View 在 ViewPager 中的 Fragment 中混淆了 EditText 焦点

android - 如何从构建中排除特定的 crate 类型?