问题:
RxView.clicks 之后请求网络,使用retrofit,如下:
RxView.clicks(findViewById(R.id.button2))
.subscribe(new Consumer<Unit>() {
@Override
public void accept(Unit unit) throws Exception {
Http.get().create(TimeApi.class).getLicense(TimeApi.url)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<TimeModel>() {
@Override
public void accept(TimeModel timeModel) throws Exception {
btn.setText(timeModel.getData() + "");
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
}
});
}
});
怎么消除嵌套?
我使用了concatMap、flatMap,compose,都有一些问题。比如Scheduler问题,或者click事件不点击直接执行问题:
ObservableTransformer<Unit, TimeModel> transformer = new ObservableTransformer<Unit, TimeModel>() {
@Override
public ObservableSource<TimeModel> apply(Observable upstream) {
return Http.get().create(TimeApi.class).getLicense(TimeApi.url);
}
};
RxView
.clicks(btn2)
.compose(transformer)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<TimeModel>() {
@Override
public void accept(TimeModel model) throws Exception {
Log.d("HHHH", model.getData()+"");
btn2.setText(String.valueOf(model.getData()));
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Log.d("HHHH", "error");
btn2.setText("---------------"+throwable.getMessage());
}
});
RxView.clicks(btn2)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.concatMap(new Function<Unit, ObservableSource<TimeModel>>() {
@Override
public ObservableSource<TimeModel> apply(Unit unit) throws Exception {
return Http.get().create(TimeApi.class).getLicense(TimeApi.url);
}
})
.subscribe(new Consumer<TimeModel>() {
@Override
public void accept(TimeModel model) throws Exception {
Log.d("HHHH", model.getData()+"");
btn2.setText(String.valueOf(model.getData()));
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Log.d("HHHH", "error");
btn2.setText("---------------"+throwable.getMessage());
}
});
Disposable subscribe = RxView
.clicks(btn2)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap(new Function<Unit, ObservableSource<TimeModel>>() {
@Override
public ObservableSource<TimeModel> apply(Unit unit) throws Exception {
Log.d("HHHH", "request");
return Http.get().create(TimeApi.class).getLicense(TimeApi.url);
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<TimeModel>() {
@Override
public void accept(TimeModel model) throws Exception {
Log.d("HHHH", model.getData()+"");
btn2.setText(String.valueOf(model.getData()));
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Log.d("HHHH", "error");
btn2.setText("---------------"+throwable.getMessage());
}
});
传送门:StackOverflow: How to use RxBinding & Retrofit?