android - RxJava2,如何组合多观察结果?

标签 android kotlin rx-java retrofit rx-java2

我正在开发 Android 应用程序。 我有一个关于 RxJava2 的问题。 这是一个例子:

我有一个用户 ID 列表。 (1, 2, 3, 4, 5, ...)

val userIds = listOf(1, 2, 3, 4, 5)

我想制作一个用户数据列表。 要获取用户数据,我应该调用“REST API”。 ( retrofit ) 在这种情况下,我应该请求多个。

获取/用户/1

获取/用户/2

获取/用户/3

获取/用户/4

获取/用户/5

...

fun getUsers(userIds: List<String>, callback: UsersLoadedCallback) {
    var userList = List<User>()

    val userObservables = mutableListOf<Observable<User>>()
    userIds.forEach {
        userObservables.add(UserService.getUser(it))
    }

    Observable.merge(userObservables)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe {
                userList.add(it)
            }
}

我知道这是错误的。 但我不知道如何解决这个问题。 “加入”、“合并”、“压缩”? 我该怎么办?

最佳答案

使用fromIterableconcatMap:

Observable.fromIterable(userIds)
    .concatMap(userId -> 
        UserService.getUser(userId).subscribeOn(Schedulers.io())
    )
    .toList()
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(users -> callback.onUsersLoaded(users), error -> { /* report */ });

关于android - RxJava2,如何组合多观察结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51320384/

相关文章:

java - 如何将多个图像上传到firebase数据库并检索

android - 使用 strings.xml 中的字符串数组填充 string[] 时出现问题

sql - kotlin 与 jooq 并手动编写表模型,无需代码生成

java - 如何在 RxJava 上使用线程?

java - 使用RxJava观察List "add"和 "remove" Action

java - Java 9 中 vector/流数据的异步、可组合返回值

android - 为什么 adb install <same-packagename-always-release> 失败?

android - 在 Android 模拟器上运行 Google Maps v2

java - Spring FileSystemResource NoSuchFileException

java - Kotlin:创建并引用真正的 Java 数组(用于 JNA)