[英]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 我的身份验证活动分为以下三个部分:
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.