首页 > 解决方案 > Android rxjava 改造链调用不起作用

问题描述

项目清单

我对 RXJava 非常陌生,我使用改造通过 android 中的 Rxjava flatmaps 调用制作 api。我的身份验证活动分为三个部分

  1. 第一部分调用登录。
  2. 成功登录后,如果他是现有用户,则获取用户以前的详细信息。
  3. 然后将 firebase fcm 令牌更新到数据库。

但是这里只有第一个平面图只执行了剩余的平面图没有执行

这是我的代码

 Auth auth = new Auth();
                auth.setEmail(email);
                auth.setPassword(password);
                authUser.createUser(auth)
                       .flatMap( response -> {
                        //Only this block is executed
                           Log.d("FlatMap1", String.valueOf(response.code()));
                           if(response.code() == 200) {
                               String token = response.body().getToken();
                               editor.putString("token", token);
                               editor.apply();

                               UserId getUser = new UserId();
                               getUser.setUid(firebaseAuth.getUid());
                               return userInfo.CurrentUser("barer " + sharedPreferences.getString("token", null), getUser);

                           }else return null;
                       })
                        .flatMap( response -> {
                           if(!isNew){
                           Log.d("FlatMap1", String.valueOf(response.code()));
                           if(response.code() == 200) {
                              UserInfo userInfo = response.body.UserInfo();

                           }else return null;
                        }else{
                         UpdateFCM updateFCM = new UpdateFCM();
                         updateFCM.setToken(fcmToken);
                         return  updateFcmToken.update("barer 
"+sharedPreferences.getString("token",null),updateFCM);
                        }
                       }).subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .unsubscribeOn(Schedulers.io())
                        .subscribe(new Observer<Response<Void>>() {
                            @Override
                            public void onSubscribe(Disposable d) {

                            }

                            @Override
                            public void onNext(Response<Void> voidResponse) {
                                Log.d("FlatMap3",String.valueOf(voidResponse.code()));
                                if(voidResponse.code() == 200){
                                    Toast.makeText(getApplicationContext(),"Login success",Toast.LENGTH_SHORT).show();
                                    finish();
                                }
                            }

                            @Override
                            public void onError(Throwable e) {

                            }

                            @Override
                            public void onComplete() {

                            }
                        });

那么出了什么问题,不要重复投票和否决;

标签: androidretrofit2rx-java2

解决方案


不允许在 RxJava2 的运算符链中返回值。由于您要返回null,因此整体突然中断,并且不会将新元素推送到流中。

阅读此内容以供参考 - RxJava 2.0 不支持 Null 值


推荐阅读