如何在RXJava/Android中连接两个订阅

如何在RXJava/Android中连接两个订阅,java,android,android-edittext,rx-java,rx-android,Java,Android,Android Edittext,Rx Java,Rx Android,如何绑定两个订阅,如: 1) 改装&RX,它将JSON转换为recyclerView中显示的字符串列表 restClient.getCatFacts() .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<CatFactsResponse>() {

如何绑定两个订阅,如:

1) 改装&RX,它将JSON转换为recyclerView中显示的字符串列表

    restClient.getCatFacts()
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Subscriber<CatFactsResponse>() {
                @Override
                public void onCompleted() {
                    Log.i(TAG, "onCompleted");
                }

                @Override
                public void onError(Throwable e) {
                    Log.i(TAG, "onError, " + e.getMessage());
                }

                @Override
                public void onNext(CatFactsResponse catFactsResponse) {
                    catFactsList = catFactsResponse.getCatFacts();
                }
            });
restClient.getCatFacts()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(新订户(){
@凌驾
未完成的公共无效(){
Log.i(标签“未完成”);
}
@凌驾
公共无效申报人(可丢弃的e){
Log.i(标记“onError”+e.getMessage());
}
@凌驾
下一页的公共空白(CatFactsResponse CatFactsResponse){
catFactsList=catFactsResponse.getCatFacts();
}
});
2) 和Jack Wharton的RxBinding库,以对EditText小部件中的更改作出反应

subscription = RxTextView
            .textChangeEvents(editText)
            .debounce(400, TimeUnit.MILLISECONDS)
            .observeOn(Schedulers.newThread())
            .subscribe(new Observer<TextViewTextChangeEvent>() {
                @Override
                public void onCompleted() {
                    Log.i(TAG, "onCompleted");
                }

                @Override
                public void onError(Throwable e) {
                    Log.i(TAG, "onError >> " + e.getMessage());
                }

                @Override
                public void onNext(TextViewTextChangeEvent textViewTextChangeEvent) {
                    Log.i(TAG, textViewTextChangeEvent.text().toString());
                }
            });
subscription=rxtview
.textChangeEvents(编辑文本)
.debounce(400,时间单位毫秒)
.observeOn(Schedulers.newThread())
.订阅(新观察员){
@凌驾
未完成的公共无效(){
Log.i(标签“未完成”);
}
@凌驾
公共无效申报人(可丢弃的e){
Log.i(标记“onError>>”+e.getMessage());
}
@凌驾
public void onNext(TextViewTextChangeEvent TextViewTextChangeEvent){
Log.i(标记,textViewTextChangeEvent.text().toString());
}
});

获取使用EditText动态筛选的列表。我应该使用像主题之类的课程吗?如果是,那么它应该是什么样子?谢谢您的帮助:)

您应该使用
flatMap
操作符

    subscription = RxTextView
            .textChangeEvents(editText)
            .debounce(400, TimeUnit.MILLISECONDS)
            .map(new Func1<TextViewTextChangeEvent, String>() {
                @Override
                public String call(TextViewTextChangeEvent textViewTextChangeEvent) {
                    return textViewTextChangeEvent.text();
                }
            })
            .flatMap(new Func1<String, Observable<CatFactsResponse>>() {
                @Override
                public Observable<CatFactsResponse> call(String text) {
                    return restClient.getCatFacts(text)
                            .subscribeOn(Schedulers.io())
                            .observeOn(AndroidSchedulers.mainThread());
                }
            })
            .subscribe(...);
subscription=rxtview
.textChangeEvents(编辑文本)
.debounce(400,时间单位毫秒)
.map(新函数1(){
@凌驾
公共字符串调用(TextViewTextChangeEvent TextViewTextChangeEvent){
返回textViewTextChangeEvent.text();
}
})
.flatMap(新函数1(){
@凌驾
公共可观察调用(字符串文本){
返回restClient.getCatFacts(文本)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
})
.认购(……);

回答得很好。现在我终于知道如何建立这样的关系:)