Android rxjava改造链调用不起作用

时间:2019-07-12 09:52:29

标签: android retrofit2 rx-java2

列表项

我对RXJava iam非常陌生,它使用改造通过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() {

                            }
                        });

那是怎么回事 并且不要重复投票和否定投票;

2 个答案:

答案 0 :(得分:0)

不允许您从RxJava2返回运算符链中的 null 值。由于您返回的是 null ,因此整个操作会突然中断,并且不会将任何新元素推入下游。

请阅读以供参考-RxJava 2.0 does not support Null Values

答案 1 :(得分:0)

您必须返回空的observable而不是返回null。

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 Observable.empty();
}