很多人在讲Rxjava的时候都会用到登录,确实这个场景很适合。
哈哈,接下来就和大家讲讲操作符的具体应用。
flatmap操作符。
狗子,上图:
flatmap
将一个发射数据的Observable 变换为多个Observables,然后将它们发射的数据合并后放进一个单独的Observable里。
上正文:
ApiService.register(new RegisterRequest()) //发起注册请求
.subscribeOn(Schedulers.io()) //在IO线程进行网络请求
.observeOn(AndroidSchedulers.mainThread()) //回到主线程去处理请求注册结果
.doOnNext(new Consumer<ResultBean>() {
@Override
public void accept(ResultBean resultBean) throws Exception {
//先根据注册的响应结果去做一些操作
}
})
.observeOn(Schedulers.io())
.flatMap(new Function<UserParam, ObservableSource<BaseBean>>() {
@Override
public ObservableSource<BaseBean> apply(UserParam param) throws Exception {
BaseBean result=null;//调用网络 ,获取用户信息
return Observable.just(result);
}
}).flatMap(new Function<BaseBean, ObservableSource<UserBean>>() {
@Override
public ObservableSource<UserBean> apply(BaseBean baseBean) throws Exception {
UserBean user=null;//调用网络
return Observable.just(user); //获取用户头像等
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<UserBean>() {
@Override
public void accept(UserBean userBean) throws Exception {
Toast.makeText(LoginRxActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
textview.setText(userBean.getName() + userBean.getAge());
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Toast.makeText(LoginRxActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
}
});