我有一个使用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) }
我做错了什么?这种替换是否可行?它 - 最重要的是 - 有意义吗? (我会说“是”)。