private val searchSubject = PublishSubject.create<Boolean>()
private val compositeDisposable = CompositeDisposable()
fun textChange(){
searSubject.onNext(true)
}
fun getSubject(){
compositeDisposable += searchSubject
.doOnNext {
if (it) showLoading()
}
.switchMap { searchGithubReposObservable() }
.subscribeWith(object : DisposableObserver<List<GithubRepo>>() {
override fun onNext(t: List<GithubRepo>) {
hideLoading()
adapter.items = t
}
override fun onComplete() {
}
override fun onError(e: Throwable) {
hideLoading()
}
})
}
Observable<List<GithubRepo>>
的功能我在github中搜索了示例代码以研究RxJava。但是,我看不懂上面的代码。
我知道要从PublishSubject接收数据,我需要订阅它。
[在上面的代码中,我认为subscribeWith
订阅了searchGithubReposObservable()的return Observable,但是当调用textchange()时,我可以从PublishSubject获取数据。
为什么有可能?
是的,当调用textchange()方法时,您可以获得数据。我在键入text api时调用了textchange,并且在下面的代码中接收到数据,因此我已经实现了这种类型的功能。
我写了请检查
autocompletetextview.debounce(500L, TimeUnit.MILLISECONDS)
.distinctUntilChanged()
.filter { it.trim().isNotEmpty() || it.isEmpty() }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap {
Observable.just(callapi here )
}
.subscribe({
it.subscribe({ serviceResponse ->
if (serviceResponse.meta.status == KeyUtils.HTTP_SUCCESS ||
serviceResponse.meta.status == KeyUtils.STATUS_META_ERROR) {
setSuccessResponse(serviceResponse, true)
} else {
setSuccessResponse(serviceResponse, false)
}
}, { throwable ->
setErrorResponse(throwable)
}).collect()
您正在收听发布主题的RX链的开始。
compositeDisposable += searchSubject
.doOnNext {
if (it) showLoading()
}
[每次调用方法textChange()
时,您按下一次searchSubject都会再次触发开关图,从而触发RX链。