- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Category
数据类和一个 Plan
数据类。每个Category
有一个计划 ID 列表。通过 Room 存储了类别和计划。我正在尝试构建本地 List<Any>
我将每个类别添加到列表中,然后添加每个类别的计划。
因此对于每个类别,将类别添加到列表中,然后添加属于该类别的每个计划。
最终结果看起来像这样......
0 -> a Category
1 -> a Plan
2 -> a Plan
3 -> a Plan
4 -> a Category
5 -> a Plan
等等
以下调用成功返回 Observable<List<Category>>
和一个 Observable<Plan>
AppDatabase
.getDatabase(context)
.categoryDao()
.getAll()
AppDatabase.getDatabase(context).planDao().getPlan(planId)
我在这里尝试构建我的列表,但实际上当我订阅它时它从未发出。没有完成,或错误。流中的所有其他内容都会受到打击。为什么我得不到最终结果?
fun fetchCategoriesAndPlans() {
val items = mutableListOf<Any>()
AppDatabase
.getDatabase(context)
.categoryDao()
.getAll()
.concatMap { listOfCategories ->
listOfCategories.toObservable()
}
.doOnNext { category ->
items.add(category)
}
.concatMap { category ->
category.getPlanIds()!!.toObservable()
}
.flatMap { planId ->
AppDatabase.getDatabase(context).planDao().getPlan(planId)
}.collectInto(items, BiConsumer{ list, i ->
Log.d(TAG, "Collect into")
list.add(i)
})
.subscribeBy(
onSuccess = {
Log.d(TAG, "Got the list")
},
onError = {
Log.e(TAG, "Couldn't build list ${it.message}", it)
})
}
最佳答案
我根据您的情况制作了一个演示,它有助于发出 Category
和 Plan
override fun onCreate(savedInstanceState: Bundle?) {
...
getCategories()
.flattenAsObservable { it }
.flatMap { getPlanWithCategory(it) }
.toList()
.subscribe({
for (item in it) {
Log.i("TAG", " " + item.javaClass.canonicalName)
}
}, {
})
}
fun getPlanWithCategory(category: Category): Observable<Any> {
val getPlansObservable = Observable.fromArray(category.planIds).flatMapIterable {
it
}.flatMap {
getPlan(it).toObservable()
}
return Observable.concat(Observable.just(category), getPlansObservable)
}
fun getPlan(planId: String): Single<Plan> {
return Single.just(Plan())
}
fun getCategories(): Single<List<Category>> {
val categories = arrayListOf<Category>()
categories.add(Category(arrayListOf("1", "2", "3")))
categories.add(Category(arrayListOf("1", "2")))
return Single.just(categories)
}
class Category(val planIds: List<String>)
class Plan
输出
I/TAG: Category
I/TAG: Plan
I/TAG: Plan
I/TAG: Category
I/TAG: Plan
I/TAG: Plan
希望对你有帮助
关于android - 使用 collectInto 从 RxKotlin/RxJava 中的两个可观察源构建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57049336/
我以为这是工作原理,好像我丢失了一些东西。 @Test fun singleCompletes() { val testSubscriber = TestSubscriber() Si
这永远不会完成: Completable.complete() .andThen{ Completable.complete() } .test() .
我将使用线程执行器与 rxkotlin 一起做一些后台工作,我将线程池大小固定为 3,但我的问题是在我的后台操作期间它只使用了 3 个中的一个线程,这减慢了我的后台操作 执行者类 class Thr
1)下面的代码无法编译并出现错误:“没有足够的信息来推断类型变量R” keywordChanges .withLatestFrom(searchParamsSubject) .subscrib
以下代码是我尝试将 RxJava 示例转换为 Kotlin 的示例。它应该收集一堆 Int变成了MutableList ,但我遇到了很多错误。 val all: Single> = Observabl
我刚开始使用 rx kotlin,还没有完全理解。我正在尝试遍历查询列表,并一个一个地执行它们。在这个列表中,我有一个特殊的字符串,一旦到达,我想打破循环并执行另一个功能 我怎样才能在下面的例子中做到
我有这个函数,它获取一个参数并首先检查它的值。如果它为空,则从返回 Single 的 fisrtFun() 的结果中获取它的值。 在该参数是否为 null 之后,它返回将参数作为输入的 secondF
我有以下调用来从服务器检索一些数据并根据响应更新 UI。 poiAPIService.getPoiDetails(poiId!!) .observeOn(Android
rxjava2 依赖和rxkotlin 依赖有什么区别。 如果我正在使用 rxkotlin 依赖项,我是否需要添加 rxjava2 依赖项。 implementation 'io.reactivex.
为什么我要使用 Kotlin 的协程? 似乎 RxKotlin 库更加通用。 相比之下,Kotlin 的协程看起来明显不那么强大,而且使用起来更麻烦。 我对协程的看法基于 this design ta
因为 sealed 就像枚举对象,所以我决定使用 sealed 类进行网络响应,如果它包含成功或失败,如果成功则它包含数据,否则错误消息 示例 sealed class Result {
我正在尝试使用以下方法在主线程上观察可观察到的: // Kotlin Code Observable .observeOn(AndroidSchedulers.mainTh
我正在尝试使用两个不同的超时值来运行示例。第一次发射的初始值较大,然后所有后续发射的值较小。该示例从 RxJava v1x 的 Java 转换为 Kotlin,尽管我尝试这是 v2x(不确定这是否有任
我正在将一些 Java 代码转换为 Kotlin,但在使用 flattenAsObservable() 时遇到了一些问题 Java 中的代码如下所示: discogsInteractor.search
我已经创建了 rx 函数来从 android 中的 view-model 调用网络调用,它在主线程函数上解析网络。 我只是更改了几行它起作用的代码。但我需要知道这样做的原因,因为它使用相同的构建器模式
我有一个 Category数据类和一个 Plan数据类。每个Category有一个计划 ID 列表。通过 Room 存储了类别和计划。我正在尝试构建本地 List我将每个类别添加到列表中,然后添加每个
目前我正在使用 RxKotlin 在 Kotlin 中构建一个项目。我的 Rx 背景主要基于 RxJS。 我经常用于在 Typescript 中创建热可观察对象的模式看起来类似于: private
我是 rxjava/rxkotlin/rxandroid 的初学者。 我需要按顺序处理三个不同的异步调用。问题是第一步返回 Single ,第二个Completable第三个又是Completable
Observable.just(1) .flatMap(object : Function> { override fun apply(inte
这是一个 kotlin Activity ,它应该显示事件列表(来自 sample.json) class TalksActivity : AppCompatActivity(), TalkAdapt
我是一名优秀的程序员,十分优秀!