如何在RXJava/Android中连接两个订阅
如何绑定两个订阅,如: 1) 改装&RX,它将JSON转换为recyclerView中显示的字符串列表如何在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>() {
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());
}
})
.认购(……);
回答得很好。现在我终于知道如何建立这样的关系:)