I'm working with Rxjava2,
I'm using flatmap in RxJava with below structure: 
Observable1.flatmap() and return to Observable 2.
as below codes :
getApi().createUser(os, deviceToken)
            .compose(view.regisObserver())
            .subscribeOn(Schedulers.io())
            .flatMap(result -> {
                String user_token = result.data.user_token;
                getPreferenceStore().setAuthToken(user_token);
                setReadPolicy();
                Observable<ObjectDto<UserProfile>> obs = getApi().updateProfile(null, null, null);
                        obs.compose(view.regisObserver());
                return obs;
            })
            .subscribe(result-> {
                getPreferenceStore().setUserId(result.data.user_id);
            //                    view.onUpdateProfile();
            }, Throwable::printStackTrace);
@Override
public <T> ObservableTransformer<T, T> regisObserver() {
    return observable -> observable.compose(prepare())
            .doOnSubscribe(disposable -> showProgressDialog())
            .doOnComplete(this::closeProgressDialog)
            .doOnError(throwable -> {
                if (BuildConfig.DEBUG) {
                    throwable.printStackTrace();
                }
                showProgressDialog();
                closeProgressDialog();
            });
}
The code compiles without error. It got error in run-time NetworkErrorOnMainThread. I don't know how to fix it.
 
    