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