Rxjava从使用到原码的解析十: Rxjava实战之配合Retrofit请求完注册接口直接再请求登陆接口

25 篇文章 0 订阅
15 篇文章 0 订阅

一个注册和登陆接口

public interface LoginApi {

    @FormUrlEncoded
    @POST("user/login")
    Observable<HttpResult<LoginBean>> login(@FieldMap Map<String, Object> params);


    @FormUrlEncoded
    @POST("user/register")
    Observable<HttpResult<LoginBean>> register(@FieldMap Map<String, Object> params);
}

配置Retrofit

HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor("ancelyOkhttp:");
        httpLoggingInterceptor.setPrintLevel(HttpLoggingInterceptor.Level.BODY);
        httpLoggingInterceptor.setColorLevel(Level.INFO);
        // 初始化okhttp
        OkHttpClient.Builder builder = new OkHttpClient.Builder()
                .addInterceptor(new ProgressInterceptor())
                .addInterceptor(chain -> {
                    //默认添加 Accept-Language
                    //默认添加 User-Agent
                    Request.Builder builder1 = chain.request().newBuilder();
                    addHeards(builder1);
                    Request request = builder1
                            .addHeader("Content-type", "application/json; charset=utf-8")
                            .addHeader("Accept", "application/json")
                            .build();
                    return chain.proceed(request);
                })
                .addInterceptor(httpLoggingInterceptor)
                .readTimeout(60000, TimeUnit.MILLISECONDS)
                .writeTimeout(60000, TimeUnit.MILLISECONDS)
                .connectTimeout(60000, TimeUnit.MILLISECONDS);
        if (interceptors != null && interceptors.size() > 0) {
            for (Interceptor interceptor : interceptors) {
                if (interceptor != null) builder.addInterceptor(interceptor);
            }
        }
        builder.cookieJar(new CookieManger(getContext()))
                .retryOnConnectionFailure(true);
        if (sslParams != null)
            builder.sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager);

        mClient = builder.build();
        // 初始化Retrofit
        retrofit = new Retrofit.Builder()
                .client(mClient)
                .baseUrl(host)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(ScalarsConverterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();

 

获取Retrofit

public Retrofit getRetrofit() {
        return retrofit;
}

最后执行注册再登录

Disposable subscribe = NetWorkManager.getInstance().getRetrofit()
                .create(LoginApi.class)
                //第一步,请求服务器  开始注册
                .register(new HashMap<>())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                //注册完之后,更新注册UI
                .doOnNext(new Consumer<HttpResult<RegisterBean>>() {
                    @Override
                    public void accept(HttpResult<RegisterBean> loginBeanHttpResult) throws Exception {
                        //第二步,注册成功,更新注册成功相关UI
                    }
                })
                //马上去请求登陆请求
                .subscribeOn(Schedulers.io())//给上游戏分配io线程
                .flatMap(new Function<HttpResult<RegisterBean>, ObservableSource<HttpResult<LoginBean>>>() {
                    @Override
                    public ObservableSource<HttpResult<LoginBean>> apply(HttpResult<RegisterBean> registerBeanHttpResult) throws Exception {

                        //这里可以拿到注册的信息,然后去执行登录操作
                        //第三步,马上去请求登录操作
                        Observable<HttpResult<LoginBean>> login = NetWorkManager.getInstance().getRetrofit()
                                .create(LoginApi.class)
                                .login(new HashMap<>());
                        return login;
                    }
                })
                //登陆完之后,开始更新登陆UI
                .observeOn(AndroidSchedulers.mainThread())//把线程切换过来
                .subscribe(new Consumer<HttpResult<LoginBean>>() {
                    @Override
                    public void accept(HttpResult<LoginBean> loginBeanHttpResult) throws Exception {                
                          //第四步,登陆成功,更新成功后的UI
                        //这里就可以操作登陆成功的操作
                    }
                });

 

上面就是一个从上到下的链式编程,也叫卡片式编程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值