fromCallable中的RXjava2方法没有得到说明

Sam*_*iel 1 android kotlin rx-java2

我是新手使用rxjava并且我正在尝试使用rxjava2在后台运行一个函数,但该方法未被调用我正在使用的代码如下所示让我知道它是否是在后台执行函数的正确方法:

Observable.fromCallable<OrderItem>(Callable {
        saveToDb(existingQty, newOty, product_id)
    }).doOnSubscribe {
        object : Observable<OrderItem>() {
            override fun subscribeActual(emitter: Observer<in OrderItem>?) {
                try {
                    val orderItem = saveToDb(existingQty, newOty, product_id)
                    emitter?.onNext(orderItem)
                    emitter?.onComplete()
                } catch (e: Exception) {
                    emitter?.onError(e)
                }
            }
        }
    }
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread()).doOnSubscribe {
        object : Observer<OrderItem> {
            override fun onComplete() {
            }

            override fun onNext(t: OrderItem) {

            }

            override fun onError(e: Throwable) {
            }

            override fun onSubscribe(d: Disposable) {
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

cha*_*l03 5

你这是错误的方式.doOnSubscribe()当使用subscribe()方法订阅observable并且您尚未使用subscribe()方法订阅observable 时调用operator .

你已经调用了saveToDb方法callable,那你为什么要调用它doOnSubscribe?它没有意义.

您应该编写以下代码:

Observable.fromCallable { saveToDb(existingQty, newOty, product_id) }
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe({ orderItem ->
                    // set values to UI
                }, { e ->
                    // handle exception if any
                }, { 
                    // on complete 
                })
Run Code Online (Sandbox Code Playgroud)

使用你的逻辑.