RxJava2学习之六:登录后再获取用户信息
登录后再获取用户信息使用 FlatMap操作符,将用户请求参数转换为返回响应结果,再将响应结果转换为用户信息。
FlatMap 操作符
FlatMap 将一个发射数据的Observable变换为多个Observables,然后将它们发射的数据合并后放进一个单独的Observable。
FlatMap 操作符使用一个指定的函数对原始Observable发射的每一项数据执行变换操作,这个函数返回一个本身也发射数据的Observable,然后 FlatMap 合并这些Observables发射的数据,最后将合并后的结果当做它自己的数据序列发射。
例如,当你有一个这样的Observable:它发射一个数据序列,这些数据本身包含Observable成员或者可以变换为Observable,因此你可以创建一个新的Observable发射这些次级Observable发射的数据的完整集合。
注意:FlatMap 对这些Observables发射的数据做的是合并( merge )操作,因此它们可能是交错的。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(SERVER_ADDRESS)
.addConverterFactory(GsonConverterFactory.create())
.build();
api = retrofit.create(Api.class);
UserParam param = new UserParam("appblog.cc", "123456");
Observable.just(param).flatMap(new Function<UserParam, ObservableSource<ResponseResult>>() {
@Override
public ObservableSource<ResponseResult> apply(UserParam userParam) throws Exception {
ResponseResult result = api.login(userParam).execute().body();
return Observable.just(result);
//需要添加Retrofit适配器adapter-rxjava和addCallAdapterFactory(RxJavaCallAdapterFactory.create())
//return api.loginWithRx(userParam);
}
}).flatMap(new Function<ResponseResult, ObservableSource<User>>() {
@Override
public ObservableSource<User> apply(ResponseResult responseResult) throws Exception {
User user = api.getUserInfoWithPath(responseResult.getUserId()).execute().body();
return Observable.just(user);
}
}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<User>() {
@Override
public void accept(User user) throws Exception {
Toast.makeText(MainActivity.this, user.getUsername(), Toast.LENGTH_SHORT).show();
}
});
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/02/25/rxjava2-learning-6-obtain-user-information-after-login/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论