繁体   English   中英

Android rxjava改造链调用不起作用

[英]Android rxjava retrofit chain calls not working

项目清单

我对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() {

                            }
                        });

所以出了什么问题,不要重复投票或投反对票。

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

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

您必须返回空的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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM