daw*_*zaw 0 kotlin rx-java rx-android rx-binding rx-java2
所以我想用rx-java2进行表单验证.我正在使用Kotlin.我遇到了两个问题.emailObservable和passwordObservable都是类型Disposable!.我尝试通过调用指定类型,val emailObservable: Observable<Boolean>但Android Studio认为它Disposable!.
其次,当我想使用方法时combineLatest出现错误:使用提供的参数不能调用以下任何函数.
emailObservable和passwordObservable都能正常工作.我是rx-java的新手,我对这种类型的东西很困惑.
val emailObservable = RxTextView.afterTextChangeEvents(textEmail)
.observeOn(AndroidSchedulers.mainThread())
.map { x -> textEmail.text.length > 3 }
.subscribe { x -> foo(x) }
val passwordObservable =RxTextView.afterTextChangeEvents(textPassword)
.observeOn(AndroidSchedulers.mainThread())
.map { x -> textPassword.text.length > 5 }
.subscribe { x -> foo(x) }
Observable.combineLatest(emailObservable,
passwordObservable,
BiFunction { x: Boolean, y:Boolean -> x && y })
Run Code Online (Sandbox Code Playgroud)
关于Disposablevs Observable实际上编译器/ IDE是正确的.该subscribe方法在Observablea 上调用并返回a Disposable,即可以用来取消订阅Observable之前的东西(取消"取消").
然后该combineLatest方法需要以2 Observable秒调用,而您需要提供2 Disposable秒.要解决这个问题,你不应该subscribe直接在链中调用,而应该在结果上调用combineLatest.
例:
fun main(args: Array<String>) {
val first = Observable.intervalRange(1, 10, 0, 2, TimeUnit.SECONDS)
val second = Observable.intervalRange(10, 20, 0, 1, TimeUnit.SECONDS)
Observable.combineLatest(arrayOf(first, second)) {
"${it[0]} -> ${it[1]}"
}.blockingSubscribe() {
println(it)
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
1 -> 10
1 -> 11
2 -> 11
2 -> 12
2 -> 13
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
402 次 |
| 最近记录: |