对RxJava变量赋值感到困惑

时间:2017-06-09 07:01:59

标签: android retrofit kotlin retrofit2 rx-java2

我有一个函数,它接受用户名String并返回用户是否已存在于MongoDB数据库中。我是RxJava和Retrofit模型的新手,在订阅Observable对象后,我对hwo感到困惑,无法分配变量。

fun handleUsername(username: String): Boolean {
    var userExists = false

    UserServiceProvider.getUserService().getUserByUsername(username)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(object : Observer<User> {
                override fun onComplete() {
                    Log.d("\nAppLog: ", "Completed Operation")
                }

                override fun onNext(t: User?) {
                    Log.d("AppLog: ", t.toString())
                    userExists = true
                }

                override fun onError(e: Throwable?) {
                    Log.d("\nERROR: ", "Completed Operation")
                }

                override fun onSubscribe(d: Disposable?) {
                    Log.d("AppLog: ", "Subscribed successfully ")
                }

            })
    return userExists
}

日志工作正常,所有调用都正确执行,但userExists永远不会更改,并保持为false。我猜这是因为我在subscribe方法中创建了匿名类,但我仍然无法解释原因。

1 个答案:

答案 0 :(得分:0)

1方法是您在实际需要UserServiceProvider.getUserService().getUserByUsername(username)布尔值的函数中直接订阅从userExists获得的Observable。

如果在多个地方需要,则会有代码重复(订阅部分)。但它会解决你的问题。