对 RxJava 变量赋值感到困惑
Confused about RxJava variable Assignment
我有一个函数接受用户名字符串和 returns 无论用户是否已经存在于 MongoDB 数据库中。我是 RxJava 和 Retrofit 模型的新手,我对订阅 Observable 对象后如何分配变量感到困惑。
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 永远不会改变,并且保持错误。我猜这是因为我在订阅方法中创建了匿名 class,但我仍然无法确定原因。
1 方法是您直接在实际需要 userExists
布尔值的函数中订阅从 UserServiceProvider.getUserService().getUserByUsername(username)
获得的 Observable。
如果在多个地方需要,就会有代码重复(订阅部分)。但它会解决你的问题。
我有一个函数接受用户名字符串和 returns 无论用户是否已经存在于 MongoDB 数据库中。我是 RxJava 和 Retrofit 模型的新手,我对订阅 Observable 对象后如何分配变量感到困惑。
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 永远不会改变,并且保持错误。我猜这是因为我在订阅方法中创建了匿名 class,但我仍然无法确定原因。
1 方法是您直接在实际需要 userExists
布尔值的函数中订阅从 UserServiceProvider.getUserService().getUserByUsername(username)
获得的 Observable。
如果在多个地方需要,就会有代码重复(订阅部分)。但它会解决你的问题。