fromCallable中的RXjava2方法不尽人意

我是使用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) { } } } 

你是错误的方式。 当使用subscribe()方法subscribe() observable时,调用doOnSubscribe()运算符,并且您没有使用subscribe()方法订阅observable。

你已经调用了callable调用的saveToDb方法,那你为什么要在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 }) 

和你的逻辑一起工作。

DoOnSubscribe是指“当有人订阅它”。 但是在你的代码中没有subscribe 。 也许你想使用subsribe而不是doOnSubscribe