我有一个函数,它接受用户名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方法中创建了匿名类,但我仍然无法解释原因。
答案 0 :(得分:0)
1方法是您在实际需要UserServiceProvider.getUserService().getUserByUsername(username)
布尔值的函数中直接订阅从userExists
获得的Observable。
如果在多个地方需要,则会有代码重复(订阅部分)。但它会解决你的问题。