列表项
我对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() {
}
});
那是怎么回事 并且不要重复投票和否定投票;
答案 0 :(得分:0)
不允许您从RxJava2返回运算符链中的 null 值。由于您返回的是 null ,因此整个操作会突然中断,并且不会将任何新元素推入下游。
答案 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();
}