我们将此类用于示例:
public static class CurrentUser{
public static Observable<User> get(){
//code basically returns the currently logged in User object
//but sometimes there may not be a logged in user
}
public static Observable<PutResult> logOut(){
return get()
//I only want to execute the following if user != null
.flatMap(new Func1<User, Observable<PutResult>>() {
@Override
public Observable<PutResult> call(User user) {
//delete the session token and save
user.removeSessionToken();
return DatabaseModule.getStorIOSQLite()
.put()
.object(user)
.prepare()
.asRxObservable();
}
});
}
}
我应该在flatmap中返回null吗?这是否有任何影响,因为它期待一个Observable?
答案 0 :(得分:20)
您不应该返回null
而是Observable.empty()
。
.flatMap(new Func1<User, Observable<PutResult>>() {
@Override
public Observable<PutResult> call(User user) {
if (user == null) return Observable.empty();
//delete the session token and save
user.removeSessionToken();
return DatabaseModule.getStorIOSQLite()
.put()
.object(user)
.prepare()
.asRxObservable();
}
});
答案 1 :(得分:6)
目前尚不清楚你在说什么null
。
如果您询问Observable<PutResult>
是否可以发出PutResult
null
,那么是。这将导致外部可观察者发出null
。
如果您询问Observable<PutResult>
返回的Func1
是否为空,则为no。如果您需要跟踪发出的项目数量,请返回Observable.empty()
,(或Observable.just(null)
或类似内容。)
答案 2 :(得分:2)
在RxJava 2中,null被视为无效值。在这些情况下你可以使用Maybe组件,如下面的
Maybe<Result>
or
You can use flatMapMaybe<Result>