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

时间:2017-11-03 05:53:14

标签: 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) {
            }
        }
    }

2 个答案:

答案 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