我是使用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) {
}
}
}
答案 0 :(得分:5)
你是错误的方式。使用doOnSubscribe()
方法订阅observable时调用subscribe()
运算符,但您尚未使用subscribe()
方法订阅observable。
您已在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
})
使用你的逻辑。
答案 1 :(得分:3)
DoOnSubscribe
表示&#34;当有人订阅它时#34;。但是代码中没有subscribe
。也许您想使用subsribe
代替doOnSubscribe