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();
    }
});
上一篇 RxJava2学习之五:Map操作符
下一篇 RxJava2学习之七:关键词搜索
目录
文章列表
1 ConcurrentHashMap的size操作
ConcurrentHashMap的size操作
2
Magento SMTP扩展配置
Magento SMTP扩展配置
3
Jmeter压测
Jmeter压测
4
TestNG多线程运行及常用断言
TestNG多线程运行及常用断言
5
Flutter Widget之Image
Flutter Widget之Image
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。