Android 子订阅到RxJava';可流动数据

Android 子订阅到RxJava';可流动数据,android,kotlin,rx-java2,reactive,Android,Kotlin,Rx Java2,Reactive,我想写一个函数,它自动将RxJava的Flowable子脚本化,并获取结果数据。然后,该数据将作为参数传递给另一个进行处理的方法。我正在努力学习Kotlin的扩展函数语法和泛型 我要转换此呼叫: val scheduler = Schedulers.newThread() disposable.add( viewModel.getExams().subscribeOn(scheduler) .observeOn(scheduler)

我想写一个函数,它自动将RxJava的
Flowable
子脚本化,并获取结果数据。然后,该数据将作为参数传递给另一个进行处理的方法。我正在努力学习Kotlin的扩展函数语法和泛型

我要转换此呼叫:

    val scheduler = Schedulers.newThread()
    disposable.add(
        viewModel.getExams().subscribeOn(scheduler)
            .observeOn(scheduler)
            .subscribe({ exams ->
                exams.forEach { 
                    getSubjectOfExam(it, Schedulers.newThread())
                }
            }, { error ->
                Log.e(
                    "OverviewFragment",
                    "Unable to fetch list, $error"
                )
            })
    )
在我的
活动中
代码非常长,返回我要处理的数据的方法

在本例中,我希望将考试列表(
list
)传递到
getSubjectOfExam()
的参数中,这是列表处理的方法

到目前为止,我的函数可以编译,但根本不起作用:

/**
 * General subscription of items in a Flowable list
 * @param f method to be executed when list is loaded
 * @param scheduler scheduling units
 */
private fun Flowable<out List<Any>>.listSubscribe(
    f: (List<Any>) -> Unit,
    scheduler: Scheduler
) {
    disposable.add(
        this.subscribeOn(scheduler)
            .observeOn(scheduler)
            .subscribe({
                f(it)
            }, { error ->
                Log.e(
                    "OverviewFragment",
                    "Unable to fetch list, $error"
                )
            })
    )
}
所以,是的,我试着做一个扩展函数,并传递一个函数作为它的参数之一(我相信称为高阶函数)

使用我的方法,
getSubjectOfExam
根本不会被调用。有什么我遗漏的吗


在我的活动中,我将一直订阅
Flowable
,因此此功能将真正帮助我。

我尝试了您的代码,它似乎工作正常。是否有可能
viewModel.gettests()
getSubjectOfExam()
不起作用

此外,我还可以提出一些优化建议:

protected fun <T> Flowable<out List<T>>.listSubscribe(
    f: (List<T>) -> Unit,
    scheduler: Scheduler
) {
    disposable.add(
        this.subscribeOn(scheduler)
            .observeOn(scheduler)
            .subscribe(f, { error ->
                Log.e(
                    "OverviewFragment",
                    "Unable to fetch list, $error"
                )
            })
    )
}

事实上,您可以将
List
替换为
T
,并使其适用于任何类型。而且,观察和订阅同一个调度程序对我来说没有多大意义。我认为您可以完全删除
。observeOn
,代码仍将在您放入
的同一个计划程序中进行观察。subscribeOn

非常感谢您提供的提示!经过几个小时的调试,我确实发现getExams()中还没有任何内容,这一定是我的insertExam方法中的一个bug。
protected fun <T> Flowable<out List<T>>.listSubscribe(
    f: (List<T>) -> Unit,
    scheduler: Scheduler
) {
    disposable.add(
        this.subscribeOn(scheduler)
            .observeOn(scheduler)
            .subscribe(f, { error ->
                Log.e(
                    "OverviewFragment",
                    "Unable to fetch list, $error"
                )
            })
    )
}
viewModel.getExams().listSubscribe({ resultData ->
    resultData.forEach {
        getSubjectOfExam(exam, Schedulers.newThread())
    }
}, Schedulers.newThread())