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获取数据。
为什么有可能?
答案 0 :(得分:1)
您正在收听发布主题的RX链的开始。
compositeDisposable += searchSubject
.doOnNext {
if (it) showLoading()
}
每次调用方法textChange()
时,您都推到searchSubject,它将再次触发开关图,从而再次触发RX链。
答案 1 :(得分:0)
是的,有可能在调用textchange()方法时获取数据。我在键入text api时调用了文字更改,并且在以下代码中接收到数据,因此我实现了这种功能。
我已经写了,请检查
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()