您只需将之前的inOnlike()函数包装成一个可观察的。
public class InternetUtil {
public static Observable<Boolean> isInternetOn() {
return Observable.fromCallable(new Callable<Boolean>() {
@Override
public boolean call() throws Exception {
return isOnline();
}
});
}
}
然后您可以这样使用它:
InternetUtil.isInternetOn()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe( new Action1<Boolean>() {
@Override
public void call(boolean isOnline) {
if(isOnline){
// your mainthread code here
}
}
});
如果要使用flapMap,可能可以使用以下内容:
InternetUtil.isInternetOn()
.flatMap((new Func1<Boolean, Observable<UserProfile>>() {
@Override
public Observable<UserProfile> call(boolean isOn) {
if (isOn){
return Observable.fromCallable((Callable<ObservableSource<?>>) () -> baseDataManager.signIn(requestBody));
} else {
return Obserable.error(new Throwable("no internet"));
}
}
})
.retryWhen()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe()