Я хочу написать функцию, которая автоматически подпишется на Flowable<T>
RxJava и получит полученные данные.Эти данные затем будут переданы в качестве аргумента другому методу, который выполняет обработку.Я борюсь с синтаксисом и обобщением функции расширения 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"
)
})
)
, который очень длинный в моем коде Activity
, в метод, который возвращаетданные, которые я хочу обработать.
В этом случае я бы хотел, чтобы список экзаменов (List<Exam>
) передавался в аргумент 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"
)
})
)
}
она будет называться так:
viewModel.getExams().listSubscribe({ resultData ->
resultData.forEach {
val exam = it as Exam
getSubjectOfExam(exam, Schedulers.newThread())
}
}, Schedulers.newThread())
Так что да, я попытался сделатьрасширение функции и передача функции в качестве одного из ее аргументов (я считаю, что она называется функцией более высокого порядка).
С моим методом getSubjectOfExam
вообще не вызывается.Есть ли что-то, чего мне не хватает?
Я буду подписываться на Flowable
все время в своей Активности, поэтому эта функция действительно поможет мне.