简体   繁体   English

Android rxjava改造链调用不起作用

[英]Android rxjava retrofit chain calls not working

List item 项目清单

I very new to RXJava iam using retrofit to make api via Rxjava flatmaps calls in android. 我对RXJava iam非常陌生,它使用改造功能通过android中的Rxjava flatmaps调用制作api。 My auth activity divided in three parts in 我的身份验证活动分为以下三个部分:

  1. First part make call to login. 第一部分拨打电话进行登录。
  2. After successful login get user previous details if he is existing user. 成功登录后,获取用户先前的详细信息(如果他是现有用户)。
  3. After then update firebase fcm token to database. 之后,将firebase fcm令牌更新到数据库。

But here only first flatmap only executed remaining flatmap not executing 但是这里只有第一个平面图只执行,其余的平面图不执行

here is my code 这是我的代码

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

                            }
                        });

So what was wrong and don't make duplicate and down vote; 所以出了什么问题,不要重复投票或投反对票。

You are not allowed to return null values in operator chain from RxJava2. 不允许从RxJava2返回运算符链中的值。 Since you are returning null , the whole abruptly breaks and no new elements would be pushed down the stream. 由于您返回的是null ,因此整个操作突然中断,并且不会将任何新元素压入流中。

Read this for reference - RxJava 2.0 does not support Null Values 阅读此内容以供参考-RxJava 2.0不支持Null值

you have to return empty observable instead of return 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