[英]Chain Retrofit calls for authorization and subsequent calls using RxJava
[英]Android rxjava retrofit chain calls not working
項目清單
我對RXJava iam非常陌生,它使用改造功能通過android中的Rxjava flatmaps調用制作api。 我的身份驗證活動分為以下三個部分:
但是這里只有第一個平面圖只執行,其余的平面圖不執行
這是我的代碼
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.