完成需求
异步线程------UI线程--------异步线程-------UI线程 频繁切换
public interface IRequestNetwor {
public io. reactivex. Observable< RegisterResponse> registerAction ( @Body RegisterRequest registerRequest) ;
public Observable< LoginResponse> loginAction ( @Body LoginRequest loginRequest) ;
}
public class LoginRequest { }
public class LoginResponse { }
public class RegisterRequest { }
public class RegisterResponse { }
public class MyRetrofit {
public static Retrofit createRetrofit ( ) {
OkHttpClient. Builder builder = new OkHttpClient. Builder ( ) ;
builder. readTimeout ( 10 , TimeUnit. SECONDS ) ;
builder. connectTimeout ( 9 , TimeUnit. SECONDS ) ;
if ( BuildConfig. DEBUG ) {
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor ( ) ;
interceptor. setLevel ( HttpLoggingInterceptor. Level. BODY ) ;
builder. addInterceptor ( interceptor) ;
}
return new Retrofit. Builder ( ) . baseUrl ( "http://xxxxxxx" )
. client ( builder. build ( ) )
. addConverterFactory ( GsonConverterFactory. create ( ) )
. addCallAdapterFactory ( RxJava2CallAdapterFactory. create ( ) )
. build ( ) ;
}
}
public class RequestActivity extends AppCompatActivity {
private final String TAG = RequestActivity. class . getSimpleName ( ) ;
private TextView tv_register_ui;
private TextView tv_login_ui;
@Override
protected void onCreate ( @Nullable Bundle savedInstanceState) {
super . onCreate ( savedInstanceState) ;
setContentView ( R . layout. activity_request) ;
tv_register_ui = findViewById ( R . id. tv_login_ui) ;
tv_login_ui = findViewById ( R . id. tv_login_ui) ;
}
@SuppressLint ( "CheckResult" )
public void request ( View view) {
MyRetrofit. createRetrofit ( ) . create ( IRequestNetwor. class )
. registerAction ( new RegisterRequest ( ) )
. compose ( DownloadActivity. rxud ( ) )
. subscribe ( new Consumer < RegisterResponse> ( ) {
@Override
public void accept ( RegisterResponse registerResponse) throws Exception {
}
} ) ;
MyRetrofit. createRetrofit ( ) . create ( IRequestNetwor. class )
. loginAction ( new LoginRequest ( ) )
. compose ( DownloadActivity. rxud ( ) )
. subscribe ( new Consumer < LoginResponse> ( ) {
@Override
public void accept ( LoginResponse loginResponse) throws Exception {
}
} ) ;
}
private ProgressDialog progressDialog;
Disposable disposable;
public void request2 ( View view) {
MyRetrofit. createRetrofit ( ) . create ( IRequestNetwor. class )
. registerAction ( new RegisterRequest ( ) )
. subscribeOn ( Schedulers. io ( ) )
. observeOn ( AndroidSchedulers. mainThread ( ) )
. doOnNext ( new Consumer < RegisterResponse> ( ) {
@Override
public void accept ( RegisterResponse registerResponse) throws Exception {
}
} )
. observeOn ( Schedulers. io ( ) )
. flatMap ( new Function < RegisterResponse, ObservableSource< LoginResponse>> ( ) {
@Override
public ObservableSource< LoginResponse> apply ( RegisterResponse registerResponse) throws Exception {
Observable< LoginResponse> loginResponseObservable = MyRetrofit. createRetrofit ( ) . create ( IRequestNetwor. class )
. loginAction ( new LoginRequest ( ) ) ;
return loginResponseObservable;
}
} )
. observeOn ( AndroidSchedulers. mainThread ( ) )
. subscribe ( new Observer < LoginResponse> ( ) {
@Override
public void onSubscribe ( Disposable d) {
progressDialog = new ProgressDialog ( RequestActivity. this ) ;
progressDialog. show ( ) ;
disposable = d;
}
@Override
public void onNext ( LoginResponse loginResponse) {
}
@Override
public void onError ( Throwable e) {
}
@Override
public void onComplete ( ) {
if ( progressDialog != null ) {
progressDialog. dismiss ( ) ;
}
}
} ) ;
}
@Override
protected void onDestroy ( ) {
super . onDestroy ( ) ;
if ( disposable != null )
if ( ! disposable. isDisposed ( ) )
disposable. dispose ( ) ;
}
}