用RxJava替换外部调用的回调

时间:2017-11-20 12:44:36

标签: android callback kotlin rx-java google-vision

我有一个使用Google Mobile Vision的应用程序,其中检测器的detect(Frame frame)方法由框架在外部调用。在该方法中,我调用托管Activity的回调:

override fun detect(frame: Frame?): SparseArray<Barcode> {
    ...
    activity.doSomethingOn(theDetections)
}

由于逻辑的反应性,我想在尽可能多的地方引入ReactiveX,并用创建流替换回调。有可能吗?以下不起作用:

val detections: Flowable<SparseArray<Barcode>> = SparseArray<Barcode>()
    .toSingle()
    .toFlowable()

override fun detect(frame: Frame?): SparseArray<Barcode> {
    ...
    detections.concatWith(detections.toSingle().toFlowable())
}

并且在活动中根本没有调用它:

detector.detections
    .subscribeOn(AndroidSchedulers.mainThread())
    .forEach { info(detections.size) }

这也不起作用:

val detections: Flowable<SparseArray<Barcode>> = SparseArray<Barcode>()
    .toSingle()
    .toFlowable()

fun lastDetections(): Flowable<SparseArray<Barcode>> = detections

override fun detect(frame: Frame?): SparseArray<Barcode> {
    ...
    detections.concatWith(detections.toSingle().toFlowable())
    lastDetections()
}

和活动:

detector.lastDetections()
    .subscribeOn(AndroidSchedulers.mainThread())
    .forEach { info(detections.size) }

我做错了什么?这种替换是否可行?它 - 最重要的是 - 有意义吗? (我会说“是”)。

0 个答案:

没有答案