簡體   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