RxJava2-订阅PublishSubject

问题描述 投票:0回答:2
 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()
            }
        })
}
  • searchGithubReposObservable是返回Observable<List<GithubRepo>>的功能

我在github中搜索了示例代码以研究RxJava。但是,我看不懂上面的代码。

我知道要从PublishSubject接收数据,我需要订阅它。

[在上面的代码中,我认为subscribeWith订阅了searchGithubReposObservable()的return Observable,但是当调用textchange()时,我可以从PublishSubject获取数据。

为什么有可能?

android kotlin rx-java rx-java2
2个回答
0
投票

是的,当调用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()

0
投票

您正在收听发布主题的RX链的开始。

compositeDisposable += searchSubject
    .doOnNext {
        if (it) showLoading()
    }

[每次调用方法textChange()时,您按下一次searchSubject都会再次触发开关图,从而触发RX链。

© www.soinside.com 2019 - 2024. All rights reserved.